J'ai trouvé quelques messages qui sont semblables dans la nature à cela, mais ils ne sont pas 100% clair donc voilà:django ModelForm propre
Dans mon point de vue j'ai une vue add_album
qui permet à un utilisateur de télécharger un album. Ce que je voudrais faire est de nettoyer le formulaire (AlbumForm
) pour vérifier si cet album est unique pour un artiste.
Mon AlbumForm
ressemble à ceci:
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
Donc c'est quelque chose le long des lignes de ce que je voudrais faire.
Mes questions sont: est-il un moyen de passer l'objet artist
de ma vue au formulaire afin que je puisse utiliser cette instance artist
dans la méthode clean
?
Je pense que je cherche à remplacer la méthode __init__
du ModelForm
, mais je ne sais pas comment le faire.
J'essaie cela, mais il ne semble pas fonctionner. Mon champ "artiste" est un modèle ForeignKey pour un artiste. Donc je fais: unique_together = ('artiste', 'limace') - pas 100% sur la façon dont cela est censé fonctionner. – tsoporan
Essayez 'unique_together = (" "artist_id", "slug") '. Pas complètement sûr que 'unique_together' fonctionne avec ForeignKeys. –
Oh hey idiot moi, j'ai oublié c'était un changement de niveau de base de données (n'a pas exécuté migrations). Ça marche, merci, c'est beaucoup mieux. – tsoporan