获取共享相同外键的多个模型中的所有对象 - 是否可能?

时间:2016-10-02 21:23:46

标签: django django-models django-queryset foreign-key-relationship

我在使用Django框架设计数据库时遇到了一个问题,我似乎无法解决这个问题。说我有以下型号:

class Report(models.Models):
    equipment = models.ForeignKey(Equipament)
    category = models.ForeignKey(Category)
    date = models.DateField()
    user = models.CharField(max_length=100)

class TestA(models.Model):
    report = models.ForeignKey(Report)
    lasers = models.FloatField()
    table = models.FloatField()
    dose = models.FloatField()
    pass_fail = models.NullBooleanField()

class TestB(models.Model):
    report = models.ForeignKey(Report)
    ctdi = models.FloatField()
    pass_fail = models.NullBooleanField()

class TestC(models.Model):
    report = models.ForeignKey(Report)
    pass_fail = models.NullBooleanField()

我的问题是:是否可以从测试B,C和D中获取与报告共享相同对象的所有对象?我不希望单独查询每个模型(TestB,TestC或TestD),因为实际上我有更多的测试模型。
任何帮助都是非常有用的。

1 个答案:

答案 0 :(得分:1)

为什么你有三种基本相同的不同型号?试试这个:

class Report(models.Models):
    equipment = models.ForeignKey(Equipment)
    category = models.ForeignKey(Category)
    date = models.DateField()
    user = models.CharField(max_length=100)

class Result(model.Model):
    report = models.ForeignKey(Report)
    status = models.BooleanField(default=False)
    lasers = models.FloatField(blank=True, null=True)
    table = models.FloatField(blank=True, null=True)
    ctdi = models.FloatField(blank=True, null=True)
    dose = models.FloatField(blank=True, null=True)
    title = models.CharField(max_length=200)

只需为每个报告添加一个标题,例如'TestA' / 'TestB',而不是创建一个全新的模型。

获取报告的所有结果:

r = Result.objects.filter(report=Report.objects.get(pk=1))