Django-使用外键引用反向搜索多个不同的对象

Django-使用外键引用反向搜索多个不同的对象,django,database,django-models,relational-database,database-schema,Django,Database,Django Models,Relational Database,Database Schema,我偶然发现了一个问题,我似乎一辈子也弄不明白。我甚至和一位数据处理方面的教授谈过,但没有找到解决方案。所以现在我正在和你们联系,希望能得到一些建议 简言之,我正在尝试创建一个保存汽车信息的系统,汽车可以在其中安装部件 以下是数据库的规范: 一辆车只有一个主人。车主可以有很多车 车主应能够对其车辆进行分组,以便能够轻松地将同一部件同时添加到多辆车辆上。然后该组应该有一个名称 车辆可以有扬声器、座椅、车轮,所有这些都具有不同的属性集。请注意,汽车可能没有这些零件。它也可能有多个零件 扬声器必须包含有

我偶然发现了一个问题,我似乎一辈子也弄不明白。我甚至和一位数据处理方面的教授谈过,但没有找到解决方案。所以现在我正在和你们联系,希望能得到一些建议

简言之,我正在尝试创建一个保存汽车信息的系统,汽车可以在其中安装部件

以下是数据库的规范:

一辆车只有一个主人。车主可以有很多车

车主应能够对其车辆进行分组,以便能够轻松地将同一部件同时添加到多辆车辆上。然后该组应该有一个名称

车辆可以有扬声器、座椅、车轮,所有这些都具有不同的属性集。请注意,汽车可能没有这些零件。它也可能有多个零件

扬声器必须包含有关奖项和制造商的信息。 座椅必须包含关于高度、宽度和长度的信息。 车轮必须包含有关直径和制造商的信息

还必须能够确定应首先添加哪个部分

我解决这个问题的方法是让一辆车属于一个群体,不管它是否应该属于一个群体。如果它不属于某一组,它将是该组中唯一的汽车

我今天得到了关于优先考虑部件安装的要求,所以在我下面的解决方案中没有实现

我的模型是这样的:

class CarGroup(models.Model):
    name = models.CharField(max_length=30)
    owner = models.ForeignKey(owners.models.Owner) #Another model


class Car(models.Model):
    name = models.CharField(max_length=100, blank=True, null=True)
    group = models.ForeignKey(CarGroup)

# Abstract Part Type
class PartType(models.Model):
    usedBy = models.ForeignKey(CarGroup)

    class Meta:
        abstract = True

class Speaker(PartType):
    prize = models.DecimalField()
    manufacturer = models.CharField(max_length=100)

class Seat(PartType):
    height = models.DecimalField()
    width = models.DecimalField()
    length = models.DecimalField()

class Wheel(PartType):
    diameter = models.DecimalField()
    manufacturer = models.CharField(max_length=100)
这个设计的问题是,我不知道如何从数据库中获取数据。如果我有一辆车,并且想显示属于这辆车的所有零件,我现在必须搜索每个零件表(座椅、车轮、扬声器),以查看是否有任何对象属于这辆车

这意味着我必须做到以下几点:

speakers = Speaker.objects.filter(group=CarGroup.id)
seats = Seat.objects.filter(group=CarGroup.id)
wheels = Whell.objects.filter(group=CarGroup.id)
然后检查这些查询集是否包含任何数据


我拒绝相信这是我最好的选择。你们有什么建议吗

您是否尝试过:
CarGroup.objects.select_related().get(pk=which)
?这只给出了CarGroup的名称设置变量,
car\u group
使用上述语句,您应该能够访问[related_model]\u set.all:
car\u group.speaker\u set.all()
,等等,看看这个方法,如果你想去一个小meta@DRC哇!那真的很棒。唯一的问题是它还返回所有汽车对象。有没有一种方法可以将Car排除在搜索之外,从而减少对数据库的访问?