我正在尝试确保列表名称对于特定用户是唯一的。以下是我的观点:
list = List(user=user)
new_list_form = ListForm(request.POST, instance=list)
if new_list_form.is_valid():
new_list_form.save()
这是清除标题(列表名称)的验证器:
def clean_title(self):
title = self.cleaned_data['title']
if List.objects.get(user=user, title=title):
raise forms.ValidationError("List title must be unique.")
return title
哪个不起作用,因为'ListForm' object has no attribute 'user'
如何从clean_title函数访问“instance = list”给出的用户变量?
答案 0 :(得分:3)
传递给ModelForm(instance=)
的对象存储在ModelForm().instance
中。尝试
if List.objects.get(user=self.instance.user, title=title):
答案 1 :(得分:0)
或者使用模型的Meta类的unique_together属性:
class List(models.Model):
user = models.ForeignKey(User)
title = models.CharField()
class Meta:
unique_together = (("user", "title"),)
如果用户尝试重复使用标题,那么您的表单将无法通过验证。