2 votes

django/taggit - erreur : Les objets MyData doivent avoir une valeur de clé primaire avant que vous puissiez accéder à leurs balises.

J'essaie d'utiliser django-taggit ( voir ). Voici ce que j'ai dans mon code :

models.py

class MyData(models.Model):
    title = models.CharField(blank=True, max_length=50)
    .....
    tags = TaggableManager()

vues.py

g = MyData(title=f_title)   
g.tags.add( "mytag" )
g.save()

Pour une raison quelconque, lorsque j'essaie d'enregistrer les balises et les données, j'obtiens cette erreur :

Les objets MyData doivent avoir un primaire primaire avant de pouvoir accéder à leurs balises.

Des idées ? Merci.

6voto

manji Points 26778

Utiliser MyData.objects.create(title=f_title) pour qu'il soit sauvegardé dans la BD et qu'il ait un Id puis l'accès tags

g = MyData.objects.create(title=f_title)  
g.tags.add( "mytag" )
g.save()

2voto

S.Lott Points 207588

Changez l'ordre. Enregistrez d'abord -- ce qui attribue une clé primaire -- puis modifiez les balises.

2voto

gcbirzan Points 1434

Comme le dit l'erreur, votre objet MyData doit avoir une clé primaire avant que vous n'ajoutiez des balises. En effet, les balises sont stockées via une relation many to many, et vous avez besoin de l'ID pour pouvoir le lier dans une table séparée. La solution simple est de faire :

g = MyData(title=f_title)   
g.save()
g.tags.add( "mytag" )
g.save()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X