2016-11-16 105 views
0

我的项目中有一个Translator模型。此型号具有ManyToManyFieldlanguages_verified(verbose_name ='users_languages_verified')和languages_not_verified。我想获取至少一个languages_verified集合中的所有对象LanguageDjango - 如何过滤ManyToMany关系?

所以,如果译者x和y:

x.languages_verified = ['FR','EN'] 
x.languages_not_verified = ['RU','SK'] 
y.languages_verified = ['RU'] 
y.languages_not_verified = ['SK','CZ'] 

那么输出将是['FR','EN','RU'](不是 'SK',也没有 'CZ',因为他们不是在至少一个languages_verified设置)

会有可能做到这一点,例如这样:

lang_ver_set = [] 
for language in Language.objects.all(): 
    for translator in Translator.objects.all(): 
     if language in translator.languages_verified(): 
      lang_ver_set.append(language) 
      break 

但我不知道这是如何做到这一点最有效的方式。 Django有很多神奇的滤镜技巧,比如verbose_name__in...,这可能会更快,但我找不到解决方案。

回答

1

您应该能够使用反向关系。

Language.objects.exclude(users_languages_verified=None) 
相关问题