【发布时间】:2017-04-13 21:45:26
【问题描述】:
我有一个大致像这样的 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 有诸如“设备”和“负载”之类的名称
“设备”标签可以是“HVAC”或“Lighting”
“加载”标签可以是“变量”或“天气”
我希望能够过滤到具有特定 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" 可能没有使用正确的值。
由于可能有许多不同类型的标签名称不同,我想确保我过滤到正确的标签。有没有办法解决这个问题?
【问题讨论】:
-
为什么你认为tag_type和tag_typ_name不是同一个类型?
-
好吧,假设有一个设备有两个与之关联的标签。一个标签有 tag_type.name=="Equipment" & tag.name=="Fan"。另一个标签有 tag_type.name=="Icon" & tag.name=="HVAC"。我相信当我只想要带有 tag_type.name=="Equipment" & tag.name=="HVAC" 之类标签的设备时,我在帖子中显示的过滤器调用会在查询集中包含此内容。
-
所以我猜你需要在 Tag 表上进行过滤: tags = Tags.objects.filter(type_name = 'Equipement', name = 'HVAC) 并获取结果 [x.标签中x的设备]
-
为什么 Equipment 是标签上的 Fk 而不是相反?
-
任何设备都可以有多个标签
标签: python django django-models filter django-queryset