【发布时间】:2011-10-17 01:20:34
【问题描述】:
我正在寻找这个常见问题的简单示例。到目前为止,我找到的答案对于我们这些初学者来说都遗漏了关键点。
我有一个应用程序,其中几乎每个模型都有一个外键到用户,并且有一个 unique_together 约束,其中一个字段始终是“用户”。
例如:
class SubscriberList(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=70)
date_created = models.DateTimeField(auto_now_add=True)
class Meta:
unique_together = (
('user', 'name',),
)
def __unicode__(self):
return self.name
订阅者列表始终由登录用户创建,因此在创建订阅者列表的表单中,我排除了用户字段并在保存表单时为其赋予 self.request.user 值,如下所示:
class SubscriberListCreateView(AuthCreateView):
model = SubscriberList
template_name = "forms/app.html"
form_class = SubscriberListForm
success_url = "/app/lists/"
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
return super(SubscriberListCreateView, self).form_valid(form)
这是随附的表格:
class SubscriberListForm(ModelForm):
class Meta:
model = SubscriberList
exclude = ('user')
使用此代码,有效数据就可以了。当我提交 not unique_together 的数据时,我从数据库中收到一个完整性错误。原因对我来说很清楚 - Django 不验证 unique_together 因为“用户”字段被排除在外。
如何更改我现有的代码,仍然使用 CreateView,以便提交的不是 unique_together 的数据会引发表单验证错误,而不是来自 db 的完整性错误。
【问题讨论】:
标签: django-views django-forms django-1.3