2009-12-18 61 views
0

我發現,在本質上類似於這幾個職位,但他們還沒有達到100%的清楚,所以這裏有雲:的Django的ModelForm乾淨

在我的意見我有一個add_album觀點,即允許用戶上傳一個相冊。我想要做的是清理表格(​​)以檢查這張專輯是否對於藝術家而言是唯一的。

我​​看起來像這樣:

class AlbumForm(ModelForm): 
    class Meta: 
    model = Album 
    exclude = ('slug','artist','created','is_valid', 'url', 'user', 'reported') 

    def clean_name(self): 
    super(AlbumForm, self).clean() 
    cd = self.cleaned_data 
    try: 
     Album.objects.get(slug=slugify(cd['name']), artist=artist) 
     raise forms.ValidationError("Looks like an album by that name already exists for this artist.") 
    except Album.DoesNotExist: 
     pass 

    return cd 

所以這是沿着想什麼,我做的東西線。

我的問題是:有沒有辦法將artist對象從我的視圖中傳遞到表單中,因此我可以在clean方法中使用artist實例?

我認爲我在重寫方法ModelForm,但我不確定如何去做。

回答

4

更好的方法是在模型層面上使用內置的Meta選項unique_together

如果你已經有了一個模型Album,那麼你也許可以做這樣的事情:

def Album(models.Model): 
    ... 

    class Meta: 
    unique_together = ("artist_id", "title") 
+0

我想這一點,但它似乎並沒有工作。我的「藝術家」字段是藝術家模型的外鍵。所以我這樣做:unique_together =('藝術家','slu'') - 不是100%如何這應該工作。 – tsoporan 2009-12-18 15:49:23

+0

嘗試'unique_together =(「artist_id」,「slug」)'。不完全確定'unique_together'是否適用於ForeignKeys。 – 2009-12-18 15:56:32

+0

哦,嘿,我傻了,我忘了這是一個數據庫級別的變化(沒有運行遷移)。它的工作,謝謝,這是好多了。 – tsoporan 2009-12-18 16:11:06