gpt4 book ai didi

python - Django admin 中的自定义验证

转载 作者:IT老高 更新时间:2023-10-28 22:04:45 26 4
gpt4 key购买 nike

我有一个非常简单的 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()

我需要确保没有人在管理表单中的结束日期之后输入开始日期,因此我阅读了 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 之后的讲座,如图所示:enter image description here

我做错了什么??

最佳答案

通常你只想在模型本身上定义一个 clean() 方法。

https://docs.djangoproject.com/en/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")

类似的东西可以在 django admin 中工作,而无需创建表单类。

关于python - Django admin 中的自定义验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24802244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com