2017-06-09 1 views
1

je les modèles suivants:django beaucoup à de nombreux champs ne sauve

class Offering(models.Model): 
    entity = models.OneToOneField('companies.entity') 
    company_type = models.ManyToManyField(CompanyTypeChoice, blank=True) 

@python_2_unicode_compatible 
class Tag(models.Model): 
    word = models.CharField(max_length=64) 

@python_2_unicode_compatible 
class Entity(models.Model): 
    tags = models.ManyToManyField(Tag,related_name='companies', blank=True, null=True) 

class CompanyTypeChoice(models.Model): 
title = models.CharField(max_length=64) 

J'ai la boucle suivante que je veux créer une relation de tag M2M:

offerings = Offering.objects.all() 
    for o in offerings: 
     for ct in o.company_type.all(): 
      tag = Tag.objects.get(word=ct.title) 
      e = Entity.objects.get(pk=o.entity.id) 
      e.tags.add(tag) 

Cela ne sauve pas la relation M2M. Qu'est-ce que je fais mal?

+0

Django est-il configuré pour l'autocommit? Le modèle 'CompanyTypeChoice' est également bon? –

+0

@BishwasMishra. Je n'ai pas changé la valeur par défaut sur autocommit. CompanyType a des valeurs et alimente la boucle. J'ai également posté le modèle CompanyTypeChoice. – Atma

Répondre

0

Le problème était que cette boucle s'exécutait une seule fois et entrait toutes les valeurs. Les doublons ne fonctionnaient pas à nouveau et ne généraient pas d'erreur.

0

Vous avez indiqué related_name = "companies" pour les balises dans votre modèle Entity. Donc, c'est pourquoi votre valeur de plusieurs à ne pas être sauvé. Pour résoudre ce problème, remplacez votre ligne,

e.tags.add(tag) 

avec

e.companies.add(tag) 

J'espère que cela aide.