55

同僚の講義を記録するために、非常にシンプルな Django アプリを使用しています。非常に初歩的なものなので、Django admin 自体を使用しています。ここに私のmodels.pyがあります:

#models.py
from django.db import models

class Lecture(models.Model):
    topic = models.CharField(max_length=100)
    speaker = models.CharField(max_length=100)
    start_date = models.DateField()
    end_date = models.DateField()

管理フォームで終了日の後に誰も開始日を入力しないようにする必要があるため、管理者でのカスタム検証について django ドキュメントを読み、admin.py で次のように実装しました。

#admin.py
from models import Lecture
from django.contrib import admin
from django import forms


class LectureForm(forms.ModelForm):
    class Meta:
        model = Lecture

        def clean(self):
            start_date = self.cleaned_data.get('start_date')
            end_date = self.cleaned_data.get('end_date')
            if start_date > end_date:
                raise forms.ValidationError("Dates are incorrect")
        return self.cleaned_data


class LectureAdmin(admin.ModelAdmin):
    form = LectureForm
    list_display = ('topic', 'speaker', 'start_date', 'end_date')

admin.site.register(Lecture, LectureAdmin)

ただし、これは私の管理者には何の影響もなく、画像に見られるように start_date が end_date より後の講義を保存することができます:ここに画像の説明を入力

私は何を間違っていますか??

4

3 に答える 3

39

インデントの問題があります。メソッドは、フォームのMetacleanクラス内でインデントされています。1 レベル戻します。また、returnステートメントがメソッド内でインデントされていることを確認してください。

于 2014-07-17T11:27:40.727 に答える
0
def clean(self): 
   if self.database_name != '111':
      raise ValidationError("You can use only letters ,numbers and 
      underscores.")

このクリーンな方法は、django管理者で私にとって完璧に機能します

于 2020-07-20T09:29:48.690 に答える