2017-01-18 3 views
0

bekam ich diese Tabellen in der Modelldatei:Django Modell in Kombination mit der Admin-Seite

class ingredient (models.Model): 
    ingredient_row_id=models.IntegerField(primary_key=True, editable=False) 
    ingredient_name=models.CharField(max_length=50) 

    def __str__(self): 
     return str(self.ingredient_name) 

class receip(models.Model): 
    receip_row_id=models.IntegerField(primary_key=True, editable=False) 
    receip_id=models.IntegerField() 
    receip_name=models.CharField(max_length=50) 
    receip_ingredient=models.ForeignKey(ingredient) 
    receip_ingredient_quantity=models.DecimalField(max_digits=5, decimal_places=2) 

    def __str__(self): 
     return str(self.receip_name) 

class prod(models.Model): 
    product_row_id=models.IntegerField(primary_key=True, editable=False) 
    product_name=models.CharField(max_length=50) 
    product_price=models.DecimalField(max_digits=5, decimal_places=2) 
    product_receip=models.ForeignKey(receip) 

    def __str__(self): 
     return str(self.prod_name) 

Was ich tun möchte, ist, ein Produkt zu definieren, die von einem bestimmten receip erfolgt. In diesem Rezept wird die Menge jeder Zutat angegeben.

Jetzt möchte ich all diese kombinieren. Sagen wir, ich habe eine Kirsche und Wasser im Zutaten.

Nun ist das Rezept Kirschenwasser. Also habe ich diese in receip: enter image description here

Jetzt habe ich diese im Admin-Panel kombinieren möchten enter image description here

Wie man sehen kann ich zwischen zwei „receips“ wählen kann, weil es an den receip_row_id nicht auf die receip_id verweist .

Also gibt es eine Möglichkeit, diese zu "kombinieren", so dass ich nur einen in der Admin-Site bekam. Vielleicht muss ich meine models.py ändern oder die admin.py optimieren.

Jemand hat eine Idee? Grüße

+0

Wenn Sie den Eingang ID statt Empfang Reihe ID verwenden, dann, wie wollen Sie zu verwenden, die man bestimmen (denn es wird natürlich mit dieser ID mehr als 1 sein) – denvaar

+0

Sieht für mich so aus, als ob Sie das _Water Cherry_ Rezept zweimal zur Datenbank hinzugefügt haben (= Sie haben möglicherweise neue Rezeptinstanzen für jede Zutat erstellt). Das würde erklären, warum Sie die Rezeptur zweimal im Drop-down-Menü sehen. –

Antwort

0

Ich habe nur den Verweis auf das Produkt in receip. Das funktioniert für mich, denke ich. So sieht es wie folgt nun:

class ingredient (models.Model): 
ingredient_row_id=models.IntegerField(primary_key=True, editable=False) 
ingredient_name=models.CharField(max_length=50) 

def __str__(self): 
    return str(self.ingredient_name) 

class receip(models.Model): 
receip_row_id=models.IntegerField(primary_key=True, editable=False) 
receip_id=models.IntegerField() 
receip_name=models.CharField(max_length=50) 
receip_ingredient=models.ForeignKey(ingredient) 
receip_ingredient_quantity=models.DecimalField(max_digits=5, decimal_places=2) 
receip_product=models.ForeignKey(prod) 

def __str__(self): 
    return str(self.receip_name) 

class prod(models.Model): 
product_row_id=models.IntegerField(primary_key=True, editable=False) 
product_name=models.CharField(max_length=50) 
product_price=models.DecimalField(max_digits=5, decimal_places=2) 


def __str__(self): 
    return str(self.prod_name) 
0

nicht wirklich eine Antwort, aber:

  • Sie nicht ein Feld mit primary_key Eigenschaft angeben müssen, generiert Django ein Feld id (die diese Eigenschaft hat) automatisch für Sie. Ich bin nicht sicher, warum Sie diese Felder in Ihrem Modell explizit definieren, aber ich würde sagen, dass Sie sie entfernen können.

  • ForeignKey bezieht sich immer auf den Primärschlüssel des anderen Modells. Es gibt also keine Möglichkeit für Sie, diese Felder zu "kombinieren". Sie sind im Grunde zwei verschiedene Datensätze und die App hat keine Möglichkeit herauszufinden, wie sie kombiniert werden können. Ihr DB-Schema ist mit dem, was Sie erreichen möchten, nicht kompatibel.

+0

Hey danke für die Antwort. Ich bin mir dieser primary_key-Sache bewusst, aber ich definiere sie gerne selbst. Ich weiß nicht, ob das ein schlechter Stil ist oder nicht. Ja, vielleicht muss ich mein DB Schema neu erstellen. Ich dachte, vielleicht hat jemand eine Idee. Danke noch einmal :) – Chandonne