Я ищу простой ответ на примере этой распространенной проблемы.Ответы, которые я нашел до сих пор, опускают критические точки для нас, новичков.
У меня есть приложение, в котором почти у каждой модели есть ForeignKey to User, и есть ограничение unique_together, где одно из полей всегда 'user'».
Например:
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
SubscriberList всегда создается вошедшим в систему пользователем, и, таким образом, в форме для создания списка подписчиков я исключаю поле пользователя и присваиваю ему значение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')
С этим кодом допустимы правильные данные.Когда я отправляю данные, которые не unique_together, я получаю сообщение об ошибке целостности из базы данных.Причина для меня ясна - Django не проверяет unique_together, потому что исключено поле 'user'.
Как мне изменить существующий код, все еще используя CreateView, так что отправленные данные, которые не являются unique_together, выбрасываютошибка проверки формы, а не ошибка целостности из базы данных.