我有这些模型
class Tree(models.Model):
field = models.TextField()
class TaskProgress(models.Model):
base_task = models.ForeignKey(BaseTask, on_delete=models.CASCADE)
tree = models.ForeignKey(Tree, on_delete=models.CASCADE)
class BaseTask(models.Model):
trees=models.ManyToManyField(Tree, through='TaskProgress')
class TaskType1(BaseTask):
child1_field = models.TextField()
class TaskType2(BaseTask):
child2_field = models.TextField()
如何获取与TaskType2相关的所有任务进度,
TaskProgress.objects.filter(???)
2条答案
按热度按时间fjaof16o1#
我在BaseTask类上添加了额外字段
过滤器会是这样的
afdcj2ne2#
如果模型的设计与描述的一样,我认为您所要求的是不可能的。base_task外键专门指向BaseTask。即使TaskType1和TaskType2继承自BaseTask,它们在数据库中也没有关系。它们只是看起来相似。
选项1:研究Django中的泛型关系。基本上,它允许你与多个类型的模型建立外键关系。但我不推荐它。如果你不知道你在做什么,泛型关系会很混乱。
选项2:重新考虑布局。也许可以将关系移动到两个TaskType,并通过related_name来寻址它们。
这样,您就在TaskProgress和TaskType之间创建了一个一对一的关系。您应该能够通过检查是否存在关系来查询其中一个,例如,所有TaskProgress示例都与TaskType1示例有关系。