Django 复杂查询数据库
请参见下面的场景:Django 复杂查询数据库,django,django-models,Django,Django Models,请参见下面的场景: class Case(models.Model): name = models.CharField(max_length=200) documentation = models.CharField(max_length=2048, blank=True) class Suite(models.Model): name = models.CharField(max_length=200) documentation = models.Ch
class Case(models.Model):
name = models.CharField(max_length=200)
documentation = models.CharField(max_length=2048, blank=True)
class Suite(models.Model):
name = models.CharField(max_length=200)
documentation = models.CharField(max_length=2048, blank=True)
cases = models.ManyToManyField(Case, through='SuiteThroughModel')
class Project(models.Model):
name = models.CharField(max_length=200)
documentation = models.CharField(max_length=2048, blank=True)
suites = models.ManyToManyField(Suite, through='ProjectSuiteThroughModel')
class ProjectSuiteThroughModel(OrderedModel):
project = models.ForeignKey(Project, on_delete=models.CASCADE)
suite = models.ForeignKey(Suite, on_delete=models.CASCADE)
class SuiteThroughModel(OrderedModel):
case = models.ForeignKey(Case, on_delete=models.CASCADE)
suite = models.ForeignKey(Suite, on_delete=models.CASCADE)
我试图做的是从一个特定的项目中检索所有套件。
我就是这样做的:
project = Project.objects.get(name='xyz')
suites = project.suites.all() # outputs nothing
在Django文档中,我了解到我可以从查询的另一端获取数据:
suites = Suite.objects.filter(project__name='xyz') # outputs nothing
suites = Suite.objects.filter(projectsuitethroughmodel__project__name='xyz') # outputs nothing
数据在那里,但我如何才能访问它?正如@WillemVanOnsem和@luxcem所指出的那样。我需要显式链接这些表。您确定数据在那里吗?因此有一个
SuiteThroughModel
将项目
(名称为'xyz'
)链接到一个或多个套件
?我不相信这里的数据(正确)链接。是的,数据在那里,因为当我运行Suite.objects.all()
或Case.objects.all()
时,它会出现。但是你确实通过suites=models.ManyToManyField将Suite
s和Case
s链接到了Project
(套件,通过class='ProjectSuiteThroughModel')
我应该能够访问Suite
s和Case
s。马克:是的,但随后您检索相关的Suite
s和Case
s,因此属于(此处)项目的Suite
s。