2016-07-30 25 views
0

我正在開發一個Web應用程序。這個程序有模型Location它可以是紐約,Wienna,巴黎等如何存儲每對對象的價格

現在我想有一些數據結構/表持有價格從集Location對象的任何元組。

因此,如果有3個對象,但 - 紐約州,賓夕法尼亞,威斯康星,我不得不價格存儲:

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

而且我想管理員可以添加/更改價格的任何元組。

我該怎麼辦?我想到了一些可以保存價格信息的網格,但我不知道如何在Django adminDjango ORM中模擬這種網格。

什麼我迄今所做的是一個模型CityPrice它看起來像這樣的創作:

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'),) 

但你可以看到有許多問題存在。一個問題是城市不是「平等的」,必須是city_one,而且必須是city_two。另一個問題是Admin必須爲Django-Admin中的每個元組新標籤打開,並在那裏更改非常不舒服的價格。

回答

0

我認爲最好的解決方案是讓每個Location模型爲ManyToManyField字段,該字段鏈接到CityPrice模型。這樣,許多Location模型將共享相同的價格,您將可以將多個價格分配給單個城市。

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

可以比獲得城市,它通過共享相同的價格:

price_object.locations.all() 

的更多信息和示例,以及有關在這裏:https://docs.djangoproject.com/en/1.9/topics/db/examples/many_to_many/

+0

但一個位置不僅具有一個價格。 ..它有**數量的位置對象 - 1 **價格。對於每一對。所以它不會這樣工作,不是嗎? –

+0

在這種情況下,使用ManyToMany字段。 –