同僚の講義を記録するために、非常にシンプルな 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 より後の講義を保存することができます:
私は何を間違っていますか??