#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