2016-11-29 6 views
0

ich eine Django-Modell, das ungefähr so ​​Django Filterung mit verschachtelten Abfragen

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 haben Namen wie „Equipment“ und „Laden“ können

„Equipment“ Tags sieht sein „HVAC“ oder „Beleuchtung“

„Load“ Tags können „Variable“ oder „Wetter“ sein

ich möchte Ausrüstung filtern können, die eine bestimmte tag_type mit einem Tag-Namen haben.

Wenn ich Ausrüstung will, dass einen HVAC Tag mit tag_type Equipment folgenden Arbeiten haben: Equipment.objects.filter(tag__tag_type__name="Equipment", tag__name="HVAC")

Ich glaube jedoch, dass in diesem Fall der tag_type Name und der Tag nicht unbedingt vom gleichen Tag. AKA tag__tag_type__name="Equipment" und tag__name="HVAC" verweist möglicherweise nicht mit den richtigen Werten.

Da es viele verschiedene Arten von Tags mit unterschiedlichen Namen geben kann, möchte ich sicherstellen, dass ich nach dem richtigen Filter suche. Gibt es eine Möglichkeit, das zu schaffen?

+0

Warum denkst du, dass der tag_type und der tag_typ_name nicht vom selben Typ sind? –

+0

Nun sagen, es gibt ein Gerät mit zwei Tags zugeordnet. Ein Tag hat tag_type.name == "Equipment" & tag.name == "Fan". Das andere Tag hat tag_type.name == "Icon" & tag.name == "HVAC". Ich glaube, dass der Filteraufruf, den ich in meinem Beitrag zeige, dies in der Abfrage haben würde, wenn ich nur Geräte mit einem Tag wie tag_type.name == "Equipment" & tag.name == "HVAC" haben möchte. –

+0

Also ich denke, was Sie brauchen, ist auf die Tag-Tabelle filtern: Tags = Tags.Objects.Filter (type_name = 'Equipement', Name = 'HVAC) und nehmen Sie die Ergebnisse [x.equipement für x in Tags] –

Antwort

0

Nach einigen weiteren Tests, durch Verkettung tag__tag_type__name="Equipment" und tag__name="HVAC" zusammen gewährleistet, dass es in der Tat auf dem gleichen Tag aussieht. Meine Sorgen waren unbegründet