сериализация поля в модели с отношением «многие к одному» - PullRequest
0 голосов
/ 27 марта 2019

У меня есть модель поста и модель изображения следующим образом:

class PropertyPost(models.Model):
    ....


class Image(models.Model):
    prop_post = models.ForeignKey(
        PropertyPost,
        related_name='images4thisproperty',
        on_delete=models.CASCADE)

и вот их связанные сериализации:

class PropPostSerializer(serializers.HyperlinkedModelSerializer):
 images4thisproperty = serializers.HyperlinkedRelatedField(
        many=True,
        read_only=True,
        view_name='image-detail')
      class Meta:
        model = PropertyPost
        fields = (...,images4thisproperty,...)



class ImageSerializer(serializers.HyperlinkedModelSerializer):
    prop_post = serializers.SlugRelatedField(queryset=PropertyPost.objects.all(),
                                             slug_field='pk')
      class Meta:
        model = Image
        fields = (
            'url',
            'photo',
            'prop_post',
        )

теперь, когда я сериализую свои объекты, вывод json выглядит следующим образом для модели propertypost:

{
            "images4thisproperty": [
                "http://139.50.80.132/images/4",
                "http://139.50.80.132/images/3"
            ],
 }

и выглядит следующим образом для модели изображения:

{
    "url": "http://139.50.80.132/images/1",
    "photo": "http://139.50.80.132/media/myposts/2019/20190327004444_8e3f5152-a3fd-40f2-857b-e16db3900fee.png",
    "prop_post": 1,
},
{
    "url": "http://139.50.80.132/images/2",
    "photo": "http://139.50.80.132/media/myposts/2019/20190327004450_659c207a-f3e1-471e-b2b0-c33c4708494a.png",
    "prop_post": 1,
},

Мне было интересно, могу ли я иметь поле photo модели Image, которое будет сериализовано в моем посте свойств. другими словами, я хотел бы иметь это в моем выводе сериализатора propertypost:

{
            "images4thisproperty": [
                "http://139.50.80.132/images/4",
                "http://139.50.80.132/images/3"
            ],
            "photo": [
                "http://139.50.80.132/media/myposts/2019/20190327004444_8e3f5152-a3fd-40f2-857b-e16db3900fee.png",
                "http://139.50.80.132/media/myposts/2019/20190327004450_659c207a-f3e1-471e-b2b0-c33c4708494a.png",
            ]

 }

Пожалуйста, дайте мне знать, как я могу это сделать, Спасибо,

1 Ответ

0 голосов
/ 27 марта 2019

Попробуйте изменить PropSerializer:

class PropPostSerializer(serializers.HyperlinkedModelSerializer):
    images4thisproperty = ImageSerializer(
        many=True,
        read_only=True,
        view_name='image-detail')
    class Meta:
        model = PropertyPost
        fields = (...,images4thisproperty,...)
...