Reputation: 18715
There is a Translator
model in my project. This model has ManyToManyField
languages_verified
(verbose_name='users_languages_verified') and languages_not_verified
. I want to get all Language
objects which are at at least one languages_verified
set.
So if translator x and y:
x.languages_verified = ['FR','EN']
x.languages_not_verified = ['RU','SK']
y.languages_verified = ['RU']
y.languages_not_verified = ['SK','CZ']
Then the output would be ['FR','EN','RU']
(not 'SK' nor 'CZ' because they are not in at least one languages_verified set)
It would be possible to do that for example this way:
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
But I'm not sure if this is a most efficient way how to do that. Django has many magic filter tricks like verbose_name__in...
which could be probably faster but I can't find the solution.
Upvotes: 0
Views: 59
Reputation: 599510
You should just be able to use the reverse relationship.
Language.objects.exclude(users_languages_verified=None)
Upvotes: 1