如何合并具有外键关系的不同模型的查询集?

时间:2019-03-28 22:59:06

标签: django python-3.x django-models django-queryset itertools

我在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"]
}

有没有有效的解决方案

1 个答案:

答案 0 :(得分:0)

如果您使用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']

并为您的api使用PropertyDetailsSerializer