Как объединить наборы запросов разных моделей с отношением внешнего ключа? - PullRequest
0 голосов
/ 29 марта 2019

У меня есть модели в 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 Ответ

1 голос
/ 29 марта 2019

, если вы используете 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

...