Как объединить наборы запросов разных моделей с помощью отношения внешнего ключа?

#django #python-3.x #django-models #django-queryset #itertools

#django #python-3.x #django-модели #django-queryset #python-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:

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