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

时间:2014-12-24 13:40:06

标签: 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)

然后检查这些查询集是否包含任何数据。

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

0 个答案:

没有答案