我正在开发一个 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/