Django查询字段值是多个选择之一

时间:2010-05-12 00:05:48

标签: django

假设我想建模一个系统,其中一个数据可以有多个标签(例如,StackOverflow上的问题是数据,它的标签集是标签)。我可以使用以下内容在Django中对此进行建模:

class Tag(models.Model):
    name = models.CharField(10)

class Data(models.Model):
    tags = models.ManyToManyField(Tag)

给定一组字符串,最好的方法是找到所有具有这些字符串之一的Data对象作为其标记列表中标记的名称。我想出了以下内容,但不禁想到有更“Djangonic”的方式。有什么想法吗?

tags = [ "foo", "bar", "baz" ]
q_objects = Q( tags__name = tags[0] )
for t in tags[1:]:
    q_objects = q_objects | Q( tags__name = t )
data = Data.objects.filter( q_objects ).distinct()

1 个答案:

答案 0 :(得分:3)

Use the __in feature of queryset lookups。具体来说,您可以在示例中使用tags__name__in,如文档所示。