2016-11-16 2 views
0

私のプロジェクトにTranslatorモデルがあります。このモデルはManyToManyFieldlanguages_verified(verbose_name = 'users_languages_verified')とlanguages_not_verifiedです。私は少なくともlanguages_verifiedに設定されているすべてのLanguageオブジェクトを取得したいと思います。Django - ManyToMany関係をフィルタリングする方法は?

だから、翻訳者xとyの場合:(彼らは、少なくとも1つのlanguages_verifiedセットに含まれていないので、ない 'SK' や 'CZ')

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

その後、出力は['FR','EN','RU']だろう

それはです

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) 
関連する問題