python - 在 Django 模型中正确定义此数据关系

标签 python django database database-design orm

我正在开发一个 Django 项目,其中我有两个具有关系的模型。

第一个模型概括地描述了一道菜。它有一个名字和一些其他的基本信息,例如:

dish(models.Model):
    name = models.CharField(max_length=100)
    short_desc = models.CharField(max_lenght=255)
    vegetarian = models.BooleanField(default=False)
    vegan = models.BooleanField(default=False)

第二个模型与菜肴相关,我假设是一对一的关系。该模型包含制剂和成分。该数据可能会随着菜肴的时间而改变(例如调整准备文本)。此文本的旧版本仍在存储中,但未连接到盘子。所以这道菜获得了一个新的字段,它指向当前的准备文本。

    preparation = models.???(???)

因此,每当准备描述发生变化时,都会为准备创建一个新条目,并且菜肴对准备的引用也会更新。

准备本身看起来像这样:

preparation(models.Model):
    prep_test = models.TextField()
    ingredients = models.TextField()
    last_update = models.DateTimeField()

如前所述,我认为菜肴准备之间的一对一关系是合理的。

我对一对一关系的假设是否正确?如果正确,我该如何正确定义它?

最佳答案

如果您对这道菜有多种准备,那么根据定义,您就没有一对一的关系。

定义这个的方法是从 Preparation 到 Dish 的 ForeignKey。 (注意,Python 风格是类以大写字母开头。)

class Preparation(models.Model):
    ...
    dish = models.ForeignKey('Dish')

现在您可以执行 my_dish.preparation_set.latest('last_update') 来获取菜肴的最新准备工作。如果您将内部元类添加到 Preparation 并定义 get_latest_by = 'last_update'),则可以省略 latest() 调用的参数。

关于python - 在 Django 模型中正确定义此数据关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44384661/

相关文章:

Python查找列表中不晚于给定日期的最大日期

python - Elasticsearch - field_value_factor,缺少参数

javascript - 未捕获的类型错误 : Cannot read property 'substr' of undefined (javascript)

django - 了解 Django 中的 CSRF;表单中的隐藏字段和 CSRFCookie

Mysql 分区 - 如何对包含唯一列的表进行列表分区?

php - 用 php 数据库中的数据填充组合框

python - 是否可以在 VS Code 中恢复到 "old"python 交互?

django - Geodjango 的 Beanstalk 迁移失败

python - 如何在多个 Django 应用程序中保留一个菜单?

javascript - RethinkDB:​​判断结果集中是否有下一个文档