我不知道如何在ManyToMany中过滤反向Django。我想得到LanguageLevel对象,它至少与一个UserProfile连接。
在人类中:所有的语言,比如至少一个用户都能说这种语言。
我有个模特:
class LanguageLevel(models.Model):
...和
class UserProfile(models.Model):
...
language_levels = models.ManyToManyField('LanguageLevel', blank=True, related_name='translators')
...已试过:
active_language_levels = LanguageLevel.objects.filter(lambda x: len(x.translators)!=0)和
for language_level in LanguageLevel.objects.all():
print language_level.translators
if len(language_level.translators)>0:
print 'ok'
print language_level
else:
print 'no'
print language_level发布于 2016-04-19 09:50:48
我想你是在找这样的东西:
from django.db.models import Count
LanguageLevel.objects.all() \
.annotate(translators_count=Count('translators__id')) \
.filter(translators_count__gte=1)只需在translators__id上添加适当的链接就可以计算每个用户的不同条目。
如果要为特定用户选择语言,只需在注释前传递适当的查询集:
LanguageLevel.objects.filter(translators__id=user_id)
.annotate(...)发布于 2016-04-19 09:47:47
您不能使用django orm通过M2M字段进行筛选。相反,你可以遵循这个解决办法,
LanguageLevel.objects.all().values('language_levels__id')
https://stackoverflow.com/questions/36714391
复制相似问题