Django Form Won';未显示字段时无法保存
在DJango 1.6和crispy表单中,我在model.py中有一个名为Django Form Won';未显示字段时无法保存,django,forms,django-crispy-forms,Django,Forms,Django Crispy Forms,在DJango 1.6和crispy表单中,我在model.py中有一个名为last\u modified\u by的字段。我有一个表单,用户可以在其中修改模型的对象……但我不希望他们能够修改last\u modified\u by字段。出于某种原因,如果我不公开此字段,则表单/对象在提交后将不会保存。没有错误…页面只是简单地刷新,因为它没有成功。如果我将上次修改的在表单上公开显示,则表单保存时不会出现任何问题 这是代码的简化版本(我省略了其他字段以使其更具可读性) models.py: cla
last\u modified\u by
的字段。我有一个表单,用户可以在其中修改模型的对象……但我不希望他们能够修改last\u modified\u by
字段。出于某种原因,如果我不公开此字段,则表单/对象在提交后将不会保存。没有错误…页面只是简单地刷新,因为它没有成功。如果我将上次修改的在表单上公开显示,则表单保存时不会出现任何问题
这是代码的简化版本(我省略了其他字段以使其更具可读性)
models.py:
class Request(models.Model):
...
last_modified_by = models.ForeignKey(settings.AUTH_USER_MODEL,
related_name='user_last_modified', default=None,
null=True)
在模型上,您需要将last\u modified\u by
设置为blank=True
。这相当于required=False
class Request(models.Model):
...
last_modified_by = models.ForeignKey(
settings.AUTH_USER_MODEL,
related_name='user_last_modified',
blank=True,
null=True,
)
class ModifyForm(CreateForm):
date_completed = forms.DateTimeField(
required=False,
widget=DateTimePicker(
options={
"format": "YYYY-MM-DD HH:mm",
"pickTime": True,
}
)
)
如果没有blank=True
字段,则该字段是必需的
,并且由于您的表单没有可见的last\u modified\u by
输入,它将None
传递给模型。这是无效的
完成后,您应该可以继续,但为什么不将last\u modified\u by
添加到表单exclude
列表中呢
完成日期
我们可以;看不到您的模型,但无论date\u completed
是否为blank=True
,您都将通过重新声明字段在表单上覆盖它。表单字段默认为必填,因此需要设置为required=False
class Request(models.Model):
...
last_modified_by = models.ForeignKey(
settings.AUTH_USER_MODEL,
related_name='user_last_modified',
blank=True,
null=True,
)
class ModifyForm(CreateForm):
date_completed = forms.DateTimeField(
required=False,
widget=DateTimePicker(
options={
"format": "YYYY-MM-DD HH:mm",
"pickTime": True,
}
)
)
最后,您的clean\u date\u due
只传递了值,因此不需要(在其当前状态下,您当然可以简化为so)我认为,您需要将上次修改的添加到排除
列表中。另外,set\u last\u modify\u by
的功能也不起作用,因为user
在那里没有定义