【发布时间】:2014-05-31 14:19:57
【问题描述】:
在 DJango 1.6 和脆形式中,我在 model.py 中有一个名为 last_modified_by 的字段。我有一个表单,用户可以在其中修改模型的对象......但我不希望他们能够修改 last_modified_by 字段。出于某种原因,如果我不使该字段公开可见,则表单/对象在提交后将不会保存。没有错误......页面只是简单地刷新,因为它没有成功。如果我让last_modified_by 在表单上公开可见,那么表单将毫无问题地保存。
这是代码的缩短、压缩版本(我省略了其他字段以使其更具可读性)
class ModifyForm(CreateForm):
date_completed = forms.DateTimeField(
widget=DateTimePicker(options={"format": "YYYY-MM-DD HH:mm",
"pickTime": True}))
class Meta:
model = Request
exclude = ('emails_sent',)
def __init__(self, *args, **kwargs):
super(ModifyForm, self).__init__(*args, **kwargs)
#even though this field is marked
#not required, this widget makes it...so:
self.fields['date_completed'].required = False
self.helper.layout = Layout(
Fieldset(
....
),
FormActions(
Submit('submit', 'Submit', css_class='btn-primary')
)
)
def get_date_if_not_Set(self):
if not self.fields['date_completed']:
self.fields['date_completed'] = datetime.datetime.now(pytz.utc)
self.save()
#This is needed because a person won't be able to submit a modified form
#with a previous date already set
def clean_date_due(self):
date = self.cleaned_data['date_due']
return date
def set_last_modify_by(self):
self.last_modified_by = user.pk
self.save()
models.py:
class Request(models.Model):
...
last_modified_by = models.ForeignKey(settings.AUTH_USER_MODEL,
related_name='user_last_modified', default=None,
null=True)
【问题讨论】:
标签: django forms django-crispy-forms