2016-11-29 111 views
0

我有一個Django的模型,看起來大致是這樣的Django的過濾與嵌套查詢

class Equipment(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    name = models.CharField(max_length=100) 

class Tag(models.Model): 
    id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True) 
    tag_type = models.ForeignKey(TagType) 
    equipment = models.ForeignKey(Equipment) 
    name = models.CharField(max_length=100) 

    class Meta: 
     db_table = "tag" 
     ordering = ["tag_type__name", "name"] 
     unique_together = (("tag_type", "equipment"),) 

class TagType(models.Model): 
    id = models.PositiveSmallIntegerField(primary_key=True) 
    name = models.CharField(max_length=100, unique=True) 

    class Meta: 
     db_table = "tag_type" 
     ordering = ["name"] 

TagTypes有名稱,如「設備」和「加載」

「設備」標籤可以是「暖通空調」或「照明」

「裝載」標籤可以是「可變」或「天氣」

我希望能夠篩選到有一定的TAG_TYPE與標籤名稱設備。

如果我想有一個HVAC標籤與TAG_TYPE Equipment以下工作設備: Equipment.objects.filter(tag__tag_type__name="Equipment", tag__name="HVAC")

但是,我認爲,在這種情況下,TAG_TYPE名稱和標記不一定來自同一個標籤。 AKA tag__tag_type__name="Equipment"tag__name="HVAC"可能無法與正確的價值觀來參考。

既然可以有許多不同類型的具有不同名稱的標籤,我想確保我濾波正確的。我有辦法管理這個嗎?

+0

爲什麼你認爲TAG_TYPE和tag_typ_name是不是來自同一個類型? –

+0

那麼說有一個設備有兩個與之相關的標籤。一個標籤有tag_type.name ==「Equipment」&tag.name ==「Fan」。另一個標籤有tag_type.name ==「Icon」&tag.name ==「HVAC」。我相信,過濾器調用我顯示在我的崗位會有這樣的查詢集時,我只想用的設備像tag_type.name標籤==「設備」和tag.name ==「暖通空調」。 –

+0

所以我猜你需要的是在標記表篩選: 標籤= Tags.objects.filter(TYPE_NAME =「設備公司」,名稱=「HVAC),並採取結果[x.equipement在標籤X] –

回答

0

經過一些進一步的測試,通過鏈接tag__tag_type__name="Equipment"tag__name="HVAC"在一起確保它確實看着相同的標籤。我的擔心是毫無根據的