如何在Django查询集中过滤多对一关系的多面?

很抱歉,如果有人在其他地方提出并回答了这个问题,我已经花了很多时间寻找并找不到答案。

我有两个模型-人模型和地址模型。每个人可以有许多地址。从我的观点来看,我希望能够返回给定组中所有人员的列表,但只返回我标记为主要的地址。 (如果某人没有任何地址,我仍然想退回该人)。

我的两个模型如下(为简单起见,将其简化):

class Person(models.Model):
    first = models.CharField(max_length = 30,blank=True,null=True)
    last = models.CharField(max_length = 30,null=True)

    def __str__(self):
        return self.id
class Address(models.Model):
    person = models.ForeignKey(Person,related_name = 'addresses',on_delete=models.CASCADE)
    address_1 = models.CharField(max_length = 100)
    address_2 = models.CharField(max_length = 100,null=True)
    primary_address = models.BooleanField(default = False)

    def __str__(self):
        return self.id

我还有以下序列化器:

class PersonExportSerializer(serializers.ModelSerializer):

    addresses = AddressExportSerializer(many=True,required=False)

    class Meta:
        model = Person
        fields = ('id','first','last','addresses')

    def setup_eager_loading(queryset):
        """ Perform necessary eager loading of data. """
        queryset = queryset.prefetch_related('addresses')
        return queryset
class AddressExportSerializer(serializers.ModelSerializer):

    class Meta:
        model = Address
        fields = ('id','address_1','address_2','primary_address' )

在我的视图集中,如何获得一个包含给定人员集合(即queryset = Person.objects.filter(last='Smith').distinct()但仅包括相关地址where primary_address=True的查询集?

lflxyz 回答:如何在Django查询集中过滤多对一关系的多面?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3077469.html

大家都在问