gpt4 book ai didi

django - 在 Django 管理员中,如何将博客文章设置为仅在它不是草稿时进行验证?

转载 作者:行者123 更新时间:2023-12-04 06:38:48 25 4
gpt4 key购买 nike

我正在为 Django 编写一个博客,我想使用 Django 管理员的内置验证。但是,如果博客文章状态设置为“草稿”,我想要某种方法来禁用验证。

基本上,我正在寻找应该执行以下操作的代码:

def validate(self, **kwargs):
''' do not validate drafts '''
if self.status != Post.STATUS_DRAFT:
Super(Post, self).validate(**kwargs)

最佳答案

您不能不验证表单。表单验证的作用是确保,例如,应该包含数字的值包含一个数字。您认为帖子处于“草稿”模式这一事实并不能成为日期字段包含日期而不是一串无意义文本的必要性的借口。

我想你想要的是允许某些字段在正常模式下是必需的,但在草稿模式下是可选的。

在这种情况下,这是在 上完成的。型号 等级。您可以使用自定义管理表单来强制执行此行为:

# models.py
...
class Post(models.Model):
title = models.CharField(..., null=True, blank=True)
fliddle = models.IntegerField(..., null=True, blank=True)
published = models.BooleanField() # if false, then in draft mode


# admin.py
...
class BlogForm(forms.ModelForm):
class Meta:
model = Post

title = forms.CharField(..., required=False)
fliddle = forms.IntegerField(..., required=False)

def __init__(self, *args, **kwargs):
self.instance = kwargs.get('instance', None)
super(BlogForm, self).__init__(*args, **kwargs)

def clean_title(self):
data = self.cleaned_data.get('title',None)
if self.instance and self.instance.published == True and not data:
raise forms.ValidationError("Title is required.")
return data

def clean_fliddle(self):
data = self.cleaned_data.get('fliddle',None)
if self.instance and self.instance.published == True and not data:
raise forms.ValidationError("Fliddle is required.")
return data

class BlogAdmin(admin.ModelAdmin):
class Meta:
model=Blog
form = BlogForm

admin.site.register(Blog, BlogAdmin)

关于django - 在 Django 管理员中,如何将博客文章设置为仅在它不是草稿时进行验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4540659/

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