2017-03-14 5 views
1

Ich konnte mein Problem nicht lösen, auch wenn ich andere Leute sah, die dieses Problem hatten.Django - UNIQUE Constraint fehlgeschlagen

Wie erstelle ich eine ID mit Fremdschlüssel? Und wie kann ich die ID verwenden?

Dies ist mein Code:

class Receipt(models.Model): 
    amount = models.DecimalField(max_digits=5, decimal_places=2, primary_key=True) 
    vat = models.DecimalField(max_digits=5, decimal_places=2) 
    total_amount = models.IntegerField(default=0) 


class ReceiptItem(models.Model): 
    receipt_id = models.ForeignKey('Receipt', on_delete=models.CASCADE) 
    product_id = models.ForeignKey('Product', on_delete=models.CASCADE) 
    amount = models.DecimalField(max_digits=5, decimal_places=2) 
    vat = models.DecimalField(max_digits=5, decimal_places=2) 
    vat_rate = models.DecimalField(max_digits=5, decimal_places=2) 
    sub_total = models.IntegerField(default=0) 
    name = models.CharField(max_length=200) 

class Product(models.Model): 
    name = models.CharField(max_length=5) 
    vat_rate = models.DecimalField(max_digits=5, decimal_places=2) 
    amount = models.IntegerField(default=0, primary_key=True) 

Dies ist der Fehler Ich erhalte:

django.db.utils.IntegrityError: UNIQUE constraint failed: migros_product.amount 
+1

Ich denke, nur ein Feld kann 'primary_key' sein – Gocht

+1

Der Fehler wird auf ein anderes' Modell' geworfen. Sie haben ein Modell namens "MigrosProduct" mit dem Feld "Menge". Und ich bin nicht sicher, warum Sie so viele 'primary_key's – Nrzonline

+1

verwenden, die ich meinen Code redigierte. Löschte die Primärschlüssel die unnötigen. funktioniert immer noch nicht –

Antwort

2
class Product(models.Model): 
    name = models.CharField(max_length=5) 
    vat_rate = models.DecimalField(max_digits=5, decimal_places=2) 
    amount = models.IntegerField(default=0, primary_key=True) 

Betrag wird als primary key, was bedeutet, dass die Datenbank nur erlauben 1 Datensatz pro Wert der Menge.

ABER, Sie haben auch einen default Wert von 0 festgelegt, sodass Ihre DB nur 1 Datensatz mit Betrag = 0 erstellen kann, wenn der Betragswert nicht angegeben wird.

Sie müssen entscheiden, was Sie wollen. Wenn die Eindeutigkeit des Betrags von Bedeutung ist, entfernen Sie default = 0 und geben Sie beispielsweise null = True, blank = True an.

+0

so erstellen kann Wie kann ich es beheben? Entschuldigung, ich bin Neuling auf Django und Python. –

+0

@Kaan San Sie können alle 'primary_key' Definitionen in Ihrem Code entfernen, außer Sie haben einen sehr guten Grund sie zu behalten. Django fügt standardmäßig einen Primärschlüssel hinzu. – username

Verwandte Themen