作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我是一名优秀的程序员,十分优秀!