假设我想建模一个系统,其中一个数据可以有多个标签(例如,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()