Bonjour à tous,
Je dispose d’un modèle Django qui se présente comme ceci :
class MyModel(models.Model):
class Meta:
unique_together = [
("name", "creator"),
]
name = models.CharField(max_length=255)
creator = models.ForeignKey(User, on_delete=models.CASCADE)
Puis je dispose de deux formulaires, un pour créer et l’autre pour modifier :
class MyModelCreationForm(ModelForm):
class Meta:
model = MyModel
name = CharField(max_length=255,)
class MyModelUpdateForm(ModelForm):
class Meta:
model = MyModel
name = CharField(max_length=255,)
Les deux formulaires sont similaires car j’inclus uniquement les bouts qui me paraissent intéressants.
Aucun des deux n’a de méthode clean()
ou validate()
. Dans les deux cas, la valeur de creator
est remplie dans la vue.
Or ce que je ne comprends pas, c’est que dans le cas de la création, si j’essaie de créer une nouvelle instance avec le même nom, l’erreur est bien renvoyée dans mon formulaire qui affiche qu’un modèle avec ce nom existe déjà.
Par contre, lors de la soumission des mêmes données via la modification d’une instance existante du modèle, je n’ai pas d’erreur "gracieuse" mais une erreur non gérée à la place :
duplicate key value violates unique constraint "myapp_mymodel_name_creator_id_d2e68849_uniq" DETAIL: Key (name, creator_id)=(Blabla, 3202) already exists.
Alors bien sûr aucun souci, je peux rajouter une méthode validate()
et vérifier a priori la duplication ou non. Mais ce que je ne comprends pas c’est que ce soit fait automatiquement dans le formulaire de création et pas dans celui de modification.
Quelqu’un pourrait m’éclairer ?