Ami*_*tad 34 python django django-forms django-admin django-validation
我有一个非常简单的Django应用程序,以记录给我的同事的讲座.由于它是相当基本的,我使用Django管理员本身.这是我的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()
Run Code Online (Sandbox Code Playgroud)
我需要确保没有人在管理表单中的结束日期之后输入开始日期,所以我在管理员中阅读了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)
Run Code Online (Sandbox Code Playgroud)
但是,这对我的管理员没有任何影响,我可以保存讲座,其中start_date位于end_date之后,如图所示:
我究竟做错了什么 ??
Dan*_*man 24
你有一个缩进问题.您的clean方法在表单的Meta类中缩进.将其向后移动一级.另外,请确保return语句在方法中缩进.
ari*_*ris 18
通常,您只想在模型本身上定义clean()方法。
https://docs.djangoproject.com/zh-CN/2.1/ref/models/instances/#validating-objects
from django.core.exceptions import ValidationError
class Lecture(models.Model):
topic = models.CharField(max_length=100)
speaker = models.CharField(max_length=100)
start_date = models.DateField()
end_date = models.DateField()
def clean(self):
if self.start_date > self.end_date::
raise ValidationError("Dates are incorrect")
Run Code Online (Sandbox Code Playgroud)
这样的事情将在django管理员中运行,而无需创建表单类。
| 归档时间: |
|
| 查看次数: |
23298 次 |
| 最近记录: |