Django filter queryset __in=list for *every* item in queryset

Django filter queryset __in=list for *every* item in queryset

假设我有以下型号

class Offer(models.Model):
    skills_required = models.ManyToManyField(Skill, blank=True)

class Skill(models.Model)
    title = models.CharField(max_length=80, primary_key=True)

class UserProfile(models.Model):
    skills = models.ManyToManyField(Skill)

如何使用 UserProfile 的实例过滤 Offer.objects,使 skills_required 的剩余报价成为 user_profile.skills 的子集?

我们可以计算该优惠所需技能的数量,并检查技能数量是否等于该用户配置文件的技能数量:

from django.db.models import Count, F, Q

Offer.objects.alias(
    req_skill=Count('skills_required', distinct=True),
    skills=Count(
        'skills_required',
        filter=Q(<strong>skills_required__userprofile=<em>my_userprofile</em></strong>),
        distinct=True
    )
).filter(
    <strong>req_skill=F('skills')</strong>
)

对于 , you should use .annotate(…) [Django-doc] instead of .alias(…) [Django-doc].

之前的 Django