2016-07-30 29 views
0

Ich arbeite an einer Web-App. Diese App hat Modell Location, die in New York sein, Wienna, Paris usw.So speichern Sie die Preise für jedes Objektpaar

Jetzt möchte ich einige Datenstruktur/Tisch haben, die Preis für jedes Tupel aus Reihe von Location Objekten enthält.

Also, wenn es drei Objekte noch - NY, PA, WI, ich habe Preis speichern für:

NY - PA #(since there is NY - PA price, I don't have to store PA - NY which is the same) 
NY - WI 
PA - WI 

Und ich möchte Admin der Lage sein, für jedes Tupel hinzufügen/ändern Preise.

Was soll ich tun? Ich dachte über ein Gitter nach, das Informationen über Preise enthalten würde, aber ich weiß nicht, wie man ein solches Gitter in Django admin und Django ORM simuliert.

Was ich bisher getan haben, ist die Erstellung eines Modells CityPrice, die wie folgt aussieht:

class CityPrice(models.Model): 
    city_one = models.ForeignKey(City, related_name='city_tuple') 
    city_two = models.ForeignKey(City) 
    price = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True) 

    class Meta: 
     unique_together = (('city_one', 'city_two'),) 

Aber wie Sie es mehrere Probleme sehen können gibt es. Ein Problem ist, dass Städte nicht "gleich" sind, sondern city_one und einer muss city_two sein. Ein weiteres Problem ist, dass Admin für jedes Tupel neue Registerkarte in Django-Admin öffnen und den Preis dort ändern müsste, was sehr unangenehm ist.

Antwort

0

Was ich denke, wäre eine schöne Lösung, jedes Location Modell ein ManyToManyField Feld zu haben, das zu CityPrice Modell verbindet. So werden viele Location Modelle den gleichen Preis teilen und Sie können mehrere Preise für eine einzelne Stadt haben.

class Location(models.Model): 
    # your stuff 
    price = models.ManyToManyField(CityPrice) 

Sie können als die Städte bekommen, die von den gleichen Preis zu teilen:

price_object.locations.all() 

Weitere Informationen und Beispiele dazu hier: https://docs.djangoproject.com/en/1.9/topics/db/examples/many_to_many/

+0

Aber ein Ort hat nicht nur einen Preis. .. es hat ** Anzahl der Standortobjekte - 1 ** Preise. Für jedes Paar. Also würde es nicht so funktionieren, oder? –

+0

Verwenden Sie in diesem Fall das Feld ManyToMany. –