2010-12-18 60 views
0

我想確保列表名稱對於某個用戶是唯一的。這是我的觀點:如何在Django的表單驗證中使用實例數據?

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」給出的用戶變量?

回答

3

傳遞給ModelForm(instance=)的對象存儲在ModelForm().instance中。嘗試

if List.objects.get(user=self.instance.user, title=title): 
0

或者使用元類模型的的unique_together屬性:

class List(models.Model): 
    user = models.ForeignKey(User) 
    title = models.CharField() 

    class Meta: 
     unique_together = (("user", "title"),) 

然後,如果用戶試圖重用一個標題窗體將無法通過驗證。