Der doppelte Schlüsselwert IntegrityError verstößt gegen die eindeutige Einschränkung "django / postgres"

Ich verfolge in Bezug auf aFrage, die ich früher gestellt habe in dem ich versucht habe, eine Konvertierung von einer doof / schlecht geschriebenen MySQL-Abfrage nach PostGresQL zu suchen. Ich glaube, das ist mir gelungen. Wie auch immer, ich verwende Daten, die manuell von einer MySQL-Datenbank in eine Postgres-Datenbank verschoben wurden. Ich verwende eine Abfrage, die so aussieht:

  """
  UPDATE krypdos_coderound cru

  set is_correct = case 
      when t.kv_values1 = t.kv_values2 then True 
      else False 
      end

  from 

  (select cr.id, 
    array_agg(
    case when kv1.code_round_id = cr.id 
    then kv1.option_id 
    else null end 
    ) as kv_values1,

    array_agg(
    case when kv2.code_round_id = cr_m.id 
    then kv2.option_id 
    else null end 
    ) as kv_values2

    from krypdos_coderound cr
     join krypdos_value kv1 on kv1.code_round_id = cr.id
     join krypdos_coderound cr_m 
       on cr_m.object_id=cr.object_id 
       and cr_m.content_type_id =cr.content_type_id 
     join krypdos_value kv2 on kv2.code_round_id = cr_m.id

   WHERE
     cr.is_master= False
     AND cr_m.is_master= True 
     AND cr.object_id=%s 
     AND cr.content_type_id=%s 

   GROUP BY cr.id  
  ) t

where t.id = cru.id
    """ % ( self.object_id, self.content_type.id)
  )

Ich habe Grund zu der Annahme, dass dies gut funktioniert. Dies hat jedoch zu einem neuen Problem geführt. Wenn ich versuche zu übermitteln, erhalte ich eine Fehlermeldung von Django, die besagt:

IntegrityError at (some url): 
duplicate key value violates unique constraint "krypdos_value_pkey"

Ich habe mir einige der hier veröffentlichten Antworten angesehen und noch keine Lösung für mein Problem gefunden (obwohl die damit zusammenhängenden Fragen für einige interessante Lektüre gesorgt haben). Ich sehe das in meinen Protokollen, was interessant ist, weil ich insert-django nie explizit aufrufen muss:

   STATEMENT:  INSERT INTO "krypdos_value" ("code_round_id", "variable_id", "option_id", "confidence", "freetext")
   VALUES (1105935, 11, 55, NULL, E'') 
   RETURNING "krypdos_value"."id"

Der Versuch, das auszuführen, führt jedoch zu dem doppelten Schlüsselfehler. Der eigentliche Fehler wird im folgenden Code ausgegeben.

 # Delete current coding         CodeRound.objects.filter(object_id=o.id,content_type=object_type,is_master=True).delete()
  code_round = CodeRound(object_id=o.id,content_type=object_type,coded_by=request.user,comments=request.POST.get('_comments',None),is_master=True)
  code_round.save()
  for key in request.POST.keys():
    if key[0] != '_' or key != 'csrfmiddlewaretoken':
      options = request.POST.getlist(key)
      for option in options:
        Value(code_round=code_round,variable_id=key,option_id=option,confidence=request.POST.get('_confidence_'+key, None)).save()  #This is where it dies
  # Resave to set is_correct
  code_round.save()
  o.status = '3' 
  o.save(

Ich habe die Sequenzen und dergleichen überprüft und sie scheinen in Ordnung zu sein. Zu diesem Zeitpunkt bin ich mir nicht sicher, was ich tun soll - ich gehe davon aus, dass es etwas am Ende von Django ist, aber ich bin nicht sicher. Jedes Feedback wäre sehr dankbar!

Antworten auf die Frage(9)

Ihre Antwort auf die Frage