gpt4 book ai didi

django - 如何将模型默认值获取到 Django 表单中,以便 is_valid 返回 True

转载 作者:行者123 更新时间:2023-12-02 02:27:08 25 4
gpt4 key购买 nike

我有一个 Django modelForm,它排除了一些模型字段,以便在网页上使用时,这些字段可用。我想在 API 上使用相同的 modelForm 对象。

当我在网页上使用表单时,表单的呈现会考虑模型字段的默认值,呈现表单并且提交的“最终”表单包含这些值。同样,我可以使用在创建过程中传递给表单的初始指令来做同样的事情。

问题是,当您通过 API 公开 modelForm 时,没有默认值的初始呈现来使它们显示在最终提交的表单中。这导致 is_valid 返回 false,因为表单“需要”字段,这些字段本应通过表单的初始呈现以其默认值填充。

是否有一些设置可以让表单在验证时查看这些“默认”模型值,或者我只需要编写验证代码来考虑它们?由于模型指定了默认值,因此看起来这应该可以正常工作,但事实并非如此。

除此之外,我如何找到字段以从中提取默认值作为我验证表单的点。到目前为止,我可以找到我编写的方法和贡献给该类的方法,例如 get_completion_format_display 但我没有看到模型类中字段的定义。

最佳答案

好吧,我想出了这个(可行),但我希望其他人有更优雅的解决方案。这正是我需要它做的,并且在通过 Django 进行调试时,我根本看不到任何其他方法可以做到这一点。实例参数在使用前会与初始数据合并,因此事实证明这是“修复”此问题的徒劳方法。

class MyForm(forms.ModelForm):
""" Demonstrates using the default values from the data model so that form.is_valid()
will return True if the form has sufficient data (useful when using a form object with an api."""

class Meta:
model = MyModel
exclude = ('status', 'uuid', 'submitted_on', 'completed_on',
'last_attempt', 'failure_reason')

def __init__(self, data=None, files=None, *args, **kwargs):
""" Grab the default values from the model and add them to the form so it will validate """
if data:
for field in self.Meta.model._meta.fields:
if (field.default != NOT_PROVIDED
and field.name not in self.Meta.exclude
and field.name not in data:
data[field.name] = field.default
super(MyForm, self).__init__(data, files, *args, **kwargs)

关于django - 如何将模型默认值获取到 Django 表单中,以便 is_valid 返回 True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5491452/

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