首页 > 解决方案 > 如何将不同模型的查询集与外键关系合并?

问题描述

我在 django 中有具有外键关系的模型。我努力但无法解决问题。我有该查询集的查询集PropertyDetails,我想获取Filestore默认图像为True的所有值

class PropertyDetails(models.Model):
    propertyname=CharField(max_length=10)
    dateposted=CharField(max_length=10)

class Filestore(models.Model):
   propertyid = models.ForeignKey(PropertyDetails,on_delete=models.CASCADE)
   defaultimage=BooleanField()
   imagename=models.CharField(max_lenth=10)
   imgproperty=models.Charfield(max_lenth=11)

例如给定:

(QuerySet [PropertyDetails: P1, PropertyDetails: P2])

任务:

for (PropertyDetails: P1)
    where defaultimage=True get values of 
       propertyname,values of filestore table combined with it 

(and same for P2)

我想要的回应

{
  "id":1,
  "propertyname":"P1",
  "propertyimage":["imgproperty":"property","imagename":"abc"],

  "id":2,
  "propertyname":"P2",
  "propertyimage":["imgproperty":"property","imagename":"xyz"]
}

有没有有效的解决方案

标签: djangopython-3.xdjango-modelsdjango-querysetitertools

解决方案


如果您Serializer用于获取 json。首先添加相关字段:

propertyid = models.ForeignKey(PropertyDetails,on_delete=models.CASCADE, related_name='propertyid_set')

并像这样定义Serializer

class PropertyDetailsSerializer(serializers.ModelSerializer):
      propertyimage = serializers.SerializerMethodField()

      def get_propertyimage(self, item):
        data = list(item.propertyid_set.filter(defaultimage=True).values('imgproperty', 'imagename'))
        return data

      class Meta:
        model = PropertyDetails
        fields = ['propertyimage', 'id', 'propertyname']

PropertyDetailsSerializer用于您的 api


推荐阅读