gpt4 book ai didi

Python Django Admin Clean() 方法不覆盖值

转载 作者:太空狗 更新时间:2023-10-29 21:27:00 26 4
gpt4 key购买 nike

也许我在这里遗漏了一些东西,但根据 django 文档,我应该能够在 clean() 方法中覆盖从管理表单发送的值。来自 django 文档

def clean(self):
from django.core.exceptions import ValidationError
# Don't allow draft entries to have a pub_date.
if self.status == 'draft' and self.pub_date is not None:
raise ValidationError('Draft entries may not have a publication date.')
# Set the pub_date for published items if it hasn't been set already.
if self.status == 'published' and self.pub_date is None:
self.pub_date = datetime.date.today()

我已经精简了我的代码,只是在管理员中尝试这里的一个基本示例

模型.py

class Test(models.Model):
name = models.CharField(max_length=255,)

def clean(self):
self.name = 'Robin Hood'
return self

因此,当我尝试添加新的测试记录时,如果我将名称字段留空,它应该从 clean 方法中获取值并保存。

但是,表单未通过验证,字段仍为空。

我是否遗漏了一些明显的东西?

最佳答案

您甚至无法运行模型清理方法。 Django 将首先运行表单的验证代码,并且由于您的字段未使用 blank=True 定义,表单将首先执行该约束。

你应该做的是覆盖表单,将 required=False 设置为 name 字段,然后编写一个 form clean 方法,它在 - 中设置值并返回 - self.cleaned_data:

class TestForm(forms.ModelForm):
name = forms.CharField(required=False)

class Meta:
model = Test

def clean(self):
self.cleaned_data['name'] = 'Robin Hood'
return self.cleaned_data

并在您的管理类中引用该表单:

class TestAdmin(admin.ModelAdmin):
form = TestForm

关于Python Django Admin Clean() 方法不覆盖值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14487990/

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