2017-05-26 3 views
0

Ich habe folgendes Modell:Django bulk_create verursacht doppelten Eintrag Integritätsfehler

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' 

ich dann einige Urls ist verarbeitet und dann eine Masse Anzahl dieser Objekte wie diese zu speichern:

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) 

ich der folgende Fehler:

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

Was mache ich falsch?

Antwort

1

Das Problem ist, dass Sie create() aufrufen, die die Instanz in der Datenbank erstellt, und dann versuchen, bulk_create() zu tun. Erstellen Sie stattdessen eine nicht gespeicherte Modellinstanz:

gen_content = GeneratedContent(...) 
Verwandte Themen