如何存储每对对象的价格

时间:2016-07-30 11:36:54

标签: python django django-models django-admin django-orm

我正在开发一个网络应用。这个应用程序的模型Location可以是纽约,维也纳,巴黎等。

现在我想要一些数据结构/表格,其中包含来自Location个对象的任何元组的价格

所以如果还有3个物品 - NY,PA,WI,我必须存储价格

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

但是你可以看到那里存在多个问题。一个问题是城市不平等#34;一个必须是city_one,一个必须是city_two。另一个问题是Admin必须为Django-Admin中的每个元组新标签打开并更改那里非常不舒服的价格。

1 个答案:

答案 0 :(得分: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/