【问题标题】:How to store prices for every pair of objects如何存储每对对象的价格
【发布时间】:2016-12-05 00:55:19
【问题描述】:

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

现在我想要一些数据结构/表来保存来自Location 对象集的任何元组的 price

因此,如果还有 3 个对象 - NY、PA、WI,我必须存储 price 为:

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 中的每个元组新标签打开并更改那里的价格,这非常不舒服。

【问题讨论】:

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


    【解决方案1】:

    我认为很好的解决方案是让每个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/

    【讨论】:

    • 但是一个 Location 不只有一个价格...它有 ** 个 location 对象 - 1 ** 个价格。对于每一对。所以它不会这样工作,不是吗?
    • 在这种情况下使用 ManyToMany 字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2021-09-17
    • 1970-01-01
    • 2020-12-01
    • 2016-05-25
    • 2018-06-30
    相关资源
    最近更新 更多