【问题标题】:Django model design for Shopping List with use of ManytoMany relationship?使用多对多关系的购物清单的 Django 模型设计?
【发布时间】:2021-07-31 08:51:00
【问题描述】:

我正在制作一个 Django 应用程序来处理多个购物清单。哪个应该有 ManytoMany 字段、Item 模型或 List 模型?这个模型是最优的吗?

一个列表可以有许多项目、0 个或多个子列表、0 个或多个关联商店。大多数这些关系看起来像多对多。一个项目可以在多个列表中,一个商店可以关联到多个列表。子列表只是将项目放在类别中,因此我还可以删除此模型并向项目添加类别属性。但是,最令人困惑的部分是:

项目有用于列表的 m2m 字段,但它是否也应该有用于子列表的 m2m 字段?列表不需要有子列表,因此该项目可以是列表的一部分或列表中的子列表(如文件夹/文件结构)

models.py:

class List(models.Model):
    name = models.Charfield(max_length=125)
    date = models.DateField(default=django.utils.timezone.now)

class Store(models.Model) :
    name = models.CharField(max_length=128)
    store = models.ManyToManyField(List)

class Item(models.Model):
    item = models.CharField(max_length=128)
    price = models.FloatField(default=0.0)
    category = models.CharField(max_length=128, default=None)
    checked = models.BooleanField(default=None)
    store = models.ManyToManyField(List)

class SubList(models.Model):
    name = models.Charfield(max_length=256)
    parent_list = models.ForeignKey(List)
    items = models.ManyToManyField(Item)

【问题讨论】:

    标签: python django django-models database-design model


    【解决方案1】:

    如果两个模型之间的关系是多对多的,我通常遵循这个规则来选择。例如,他/她写的AuthorBook 的关系可以建模为多对多字段,因为AuthorBook 都有唯一的身份。一个独特的Book 可以有一个或多个独特的Authors,一个独特的Author 可以写一个或多个独特的Books。

    另一方面,同一本书可以被视为Item 中的Store。在这种情况下,它不再是唯一的,因为Item 可以是该商店中的任何书籍或其他物品,但商店本身是唯一的身份,因此是一对多的关系。

    就您而言,我认为您可以管理与ForeignKey 或一对多字段的所有关系。

    【讨论】:

    • 当然,item 不是唯一的,只是列表中的一个成员。例如,您可以从宜家或沃尔玛或亚马逊购买椅子。将在列表中添加椅子,但它可以与许多商店相关
    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 2015-11-05
    • 2018-01-04
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    相关资源
    最近更新 更多