2009-07-02 7 views
1

Ich weiß nicht, ob ich denke, das ist der richtige Weg, und vielleicht wird mich jemand in Ordnung bringen.Wie speichere ich mehrere Werte in einem einzigen Attribut

Lassen Sie uns sagen, dass ich ein models.py haben, die diese enthält:

class Order(models.Model): 
    customer = models.foreignKey(Customer) 
    total = models.charField(max_length=10) 
    has_shipped = models.booleanField() 

class Product(models.Model): 
    sku = models.charField(max_length=30) 
    price = models.charField(max_length=10) 

nun offenbar eine Ordnung Produkte enthalten würde und nicht nur ein Produkt. Was wäre der beste Weg, Produkte zu einer Bestellung hinzuzufügen? Die einzige Möglichkeit, die ich mir vorstellen kann, ist, ein weiteres Feld zu "Bestellung", genannt "Produkte", hinzuzufügen und es mit einer CSV-Datei mit einem SKU für jedes Produkt zu füllen. Dies ist aus offensichtlichen Gründen nicht ideal, aber ich bin noch nicht sehr gut in diesem Zeug und habe keine Ahnung, was der bessere Weg ist.

(denken Sie daran, diese Pseudo-Code ist, also nicht Fehlbuchstabierungen dagegen, etc.)

Antwort

7

Was Sie sind, ist nach einer viele zu viele Beziehung zwischen Produkt und Ordnung.

Etwas wie:

class Order(models.Model): 
    customer = models.foreignKey(Customer) 
    total = models.charField(max_length=10) 
    has_shipped = models.booleanField() 
    products = models.ManyToManyField(Product) 

Lesen Sie die Dokumentation here und here.

+0

Dies. Möglicherweise möchten Sie Ihre URLs formatieren. – drozzy

+0

Ist das besser? –

+0

Danke Mann. Ich habe gerade "Python Web Development with Django" gelesen und kam zu dieser Schlussfolgerung, aber ich habe versucht den ganzen Tag herauszufinden, ob es richtig war. Vielen Dank. – orokusaki

0

Sie können ein weiteres Modell schaffen, das so viele-zu-viele-Beziehung zwischen Ordnung dienen und Produkte

so etwas wie dieses

class OrderProducts(models.Model) 
    product = models.ForeignKey(Product) 
    order = models.ForeignKey(Order) 
+0

Dies ist redundant, da der Auftrag selbst bereits als "Order of Products" dient – drozzy

+0

Ja, aber in der Antwort. Zu dem Zeitpunkt, dass ich diese Antwort schrieb ich nur nicht an die Art Modelle erinnern. VieleToManyField in Django so vorgeschlagen, klassische Lösung. – tdelev

+0

Dies ist nicht redundant. Was ist, wenn Sie in Zukunft eine Preisänderung haben? Wenn Sie eine Preisänderung hatten und die Bestellung nur mit den Originalprodukten verbunden war, hätten Sie keine Möglichkeit zu wissen, wie viel der Kunde für was bezahlt hat. Auf diese Weise können Sie die Produkte zum Zeitpunkt der Bestellung in ihrem aktuellen Zustand spiegeln. – orokusaki

Verwandte Themen