2014-05-17 7 views
0

Je cherche à ajouter un élément à un champ manytomany dans un modèle django. Actuellement, le nouvel objet tag est en cours de création mais il n'est simplement pas ajouté à MyModel lorsque j'appelle save dans l'admin. Je ne reçois aucune erreur de mon code, aucune idée?Ajouter un objet au champ ManyToMany sur enregistrer dans Django

class Tag(models.Model): 
    text = models.SlugField(max_length=50, unique=True) 


class MyModel(models.Model): 
    tags = models.ManyToManyField("Tag", blank=True) 

    def save(self, *args, **kwargs): 
     if (self.tags.count() == 0): 
      tag, created = Tag.objects.get_or_create(text=get_word()) 
      tag.save() 
      self.tags.add(tag) 

     return super(MyModel, self).save(*args, **kwargs) 
+0

Comment utilisez-vous cela dans l'administration? Comment entrez-vous le texte de l'étiquette? Et qu'est-ce que 'get_word?' –

+0

Bonjour Daniel, J'utilise simplement l'admin django pour entrer mon texte de tag. Je l'utilise également pour créer et enregistrer des modifications en utilisant mes modèles. Le get_word() renvoie juste une chaîne basée sur une autre logique qui n'est pas tout à fait pertinente. D'après ce que je comprends, les champs m2m sont sauvegardés après l'enregistrement du modèle. Il semble que je vais avoir besoin de trouver une solution de contournement pour cela. – Gunther

Répondre

0

Au premier, vous devez enregistrer par exemple MyModel et suivant l'utilisation self.tags.add (tag)

class MyModel(models.Model): 
    tags = models.ManyToManyField("Tag", blank=True) 

    def save(self, *args, **kwargs): 
     super(MyModel, self).save(*args, **kwargs) # saving MyModel instance 

     tag, created = Tag.objects.get_or_create(text=get_word()) 
     tag.save() 
     self.tags.add(tag) # adding m2m to saved instance MyModel 

     return self 
+0

Merci Slawek, je n'ai toujours pas de succès. Après d'autres recherches, j'ai découvert que ce que je faisais n'est pas possible parce que de nombreux champs sont sauvegardés après l'enregistrement du modèle. – Gunther

+0

Montrez-moi votre code. –

Questions connexes