我发现了一些与此类似的帖子,但它们并没有100%明确,所以这里有:
在我的观看中,我有一个add_album
视图,允许用户上传相册。我想做的是清理表单(AlbumForm
)以检查此专辑是否对艺术家来说是唯一的。
我的AlbumForm
看起来像这样:
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
对象从我的视图传递到表单,以便我可以在artist
方法中使用该clean
实例?
我认为我正在考虑覆盖__init__
的{{1}}方法,但我不确定如何做到这一点。
答案 0 :(得分:4)
更好的方法是在模型级别,使用内置的Meta选项unique_together
。
如果你有一个模型Album
,那么你可以这样做:
def Album(models.Model):
...
class Meta:
unique_together = ("artist_id", "title")