2017-05-26 1 views
0

J'ai le modèle suivant:Django bulk_create provoque une erreur d'intégrité d'entrée en double

class GeneratedContent(models.Model): 
    entity = models.ForeignKey('companies.Entity') 
    source_url = models.URLField(max_length=255) 
    title = models.CharField(max_length=255, blank=True, null=True) 
    desc = models.TextField(blank=True, null=True) 
    created_at = models.DateTimeField(auto_now_add = True) 
    updated_at = models.DateTimeField(auto_now = True) 

    def __str__(self): 
     return self.entity.name +' Content' 

Je suis alors le traitement des urls, puis d'enregistrer un numéro en vrac de ces objets comme celui-ci:

gen_content_list = [] 
     for e in entities: 
      entity_status = get_tweets(e.twitter_handle()) 

      try: 
       stat_url = re.search("(?P<url>https?://[^\s]+)", entity_status).group("url") 
       gen_content = GeneratedContent.objects.create(
        entity=e, 
        desc=entity_status, 
        source_url=stat_url, 
        crawled=False, 
        ) 
       gen_content_list.append(gen_content) 
       self.stdout.write(self.style.SUCCESS(e.name+' status: '+stat_url.encode('ascii','replace'))) 
      except: 
       pass 
     if gen_content_list: 
      GeneratedContent.objects.bulk_create(gen_content_list) 

Je reçois l'erreur suivante:

django.db.utils.IntegrityError: (1062, "Duplicate entry '19' for key 'PRIMARY'")

Qu'est-ce que je fais mal?

Répondre

1

Le problème est que vous appelez create() -qui crée l'instance dans la base de données, puis que vous essayez d'exécuter bulk_create(). Au lieu de cela, créez une instance de modèle non enregistrée:

gen_content = GeneratedContent(...)