如何在Django中检查set字段是否包含特定值?

时间:2013-07-28 15:46:28

标签: django django-models django-views

这可能是一个非常简单的问题,但我一直在寻找django文档并找不到答案。

我的问题是,我想检查一个语言,一个能说多个语言的用户是否会说出给定的语言。

我的相关课程:

class Language(models.Model):
    idiom = models.CharField(max_length=40, unique=True)

class Profile(UserenaBaseProfile):
    spoken_languages = models.ManyToManyField(Language, blank = True)

鉴于:query_set = Profile.objects.all()

我尝试过这样的事情:

ls = Language.get(idiom="some language here")

query_set.filter(spoken_languages__idiom__contains=ls.idiom)
query_set.filter(spoken_languages__contains=ls)

ls = Language.objects.filter(idiom="some language")
query_set.filter(spoken__languages__in=ls)

更多但没有成功,似乎应该很容易,但我仍然找不到正确的方法。任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

这应该有效:

profiles = Profile.objects.filter(spoken_languages__idiom="language here")

请注意,在查询集上调用.filter()不会更改查询集对象。相反,它会创建并返回应用了新过滤器的克隆。因此,如果要筛选现有的查询集,则应执行以下操作:

query_set = query_set.filter(spoken_languages__idiom="language here")