如何在Django中使用表单验证中的实例数据?

时间:2010-12-18 04:18:45

标签: django django-forms

我正在尝试确保列表名称对于特定用户是唯一的。以下是我的观点:

    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”给出的用户变量?

2 个答案:

答案 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"),)

如果用户尝试重复使用标题,那么您的表单将无法通过验证。