как получить доступ к дочерней записи целиком в родительской модели в структуре отдыха django - PullRequest
0 голосов
/ 06 марта 2019

Я новичок в Django rest framework. Я пытаюсь получить записи дочерней модели в родительскую модель в виде поля, чтобы все записи моделей RefreshmentImage были доступны в games_sports list.i опубликовал пример кода.

model.py

class Refreshment(models.Model):
    title = models.CharField(max_length=200, unique=True)
    type = models.CharField(max_length=200)
    charges = models.DecimalField(max_digits=12, decimal_places=2, help_text="Charges per hour")


class RefreshmentImage(models.Model):
    refreshment = models.ForeignKey(Refreshment, on_delete=models.CASCADE)
    image = models.FileField(upload_to="refreshment_image/", null=True, blank=True)

serializers.py

class EntertainmentSerializer(serializers.ModelSerializer):
     class Meta:
          model = Refreshment
          fields = '__all__'

  class RefreshmentImageSerializer(serializers.ModelSerializer):
        refreshment = EntertainmentSerializer(read_only=True, many=True)
        class Meta:
              model = RefreshmentImage
              fields = '__all__'

views.py

def all_games_sports(request):
   entertainment = Refreshment.objects.all()
   serialize = EntertainmentSerializer(instance=entertainment,many=True)
   serial = RefreshmentImageSerializer(instance=entertainment,many=True)
   main = {'status': True, 'code': CODE_SUCCESSFUL, 'msg': SUCCESS, 'games_sports': serialize.data,'image':serial.data}
   return HttpResponse(json.dumps(main), content_type='application/json')

что я получил, это как:

games_sports": [
    {
        "id": 1,
        "title": "yyy",
        "type": 1,
        "charges": "500.00",
    },
    {
        "id": 2,
        "title": "xxxxx",
        "type": "something",
        "charges": "501.00",
    }
     *******
    ],
 "image": [
    {
        "id": 1,
        "image": null,
        "date_created": "2019-03-03T08:16:15.538024+05:30"
    },
    **********
  ]

Я хочу, чтобы это было:

games_sports": [
{
    "id": 1,
    "title": "yyy",
    "type": 1,
    "charges": "500.00",
    "image": [
             {
             "id": 1,
              "image": image_path,
              "date_created": "2019-03-03T08:16:15.538024+05:30"
          },

}
 ***********
],

1 Ответ

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

Попробуйте этот фрагмент


#serializers.py
"""I've re-arranged the order of 'RefreshmentImageSerializer' serializer and 'EntertainmentSerializer' serializer"""
class RefreshmentImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = RefreshmentImage
        fields = '__all__'


class EntertainmentSerializer(serializers.ModelSerializer):
    <b>image = RefreshmentImageSerializer(many=True, source='refreshmentimage_set')</b>

    class Meta:
        model = Refreshment
        fields = '__all__'

# views.py
"""Added DRF stuffs such as 'api_view' and 'Response'"""
from rest_framework.decorators import api_view


@api_view()
def all_games_sports(request):
    entertainment = Refreshment.objects.all()
    serialize = EntertainmentSerializer(instance=entertainment, many=True)
    main = {'status': True, 'code': "CODE_SUCCESSFUL", 'msg': "SUCCESS", 'games_sports': serialize.data}
    return Response(main)

{
"status": true,
"code": "CODE_SUCCESSFUL",
"msg": "SUCCESS",
"games_sports": [
    {
        "id": 1,
        "image": [
            {
                "id": 1,
                "image": null,
                "refreshment": 1
            },
            {
                "id": 3,
                "image": "refreshment_image/jpg-icon.png",
                "refreshment": 1
            }
        ],
        "title": "t1",
        "type": "tt1",
        "charges": "123.00"
    },
    {
        "id": 2,
        "image": [
            {
                "id": 2,
                "image": "refreshment_image/asd.jpg",
                "refreshment": 2
            }
        ],
        "title": "t2",
        "type": "tt2",
        "charges": "321.00"
    },
    {
        "id": 3,
        "image": [
            {
                "id": 4,
                "image": "refreshment_image/Screenshot_from_2018-10-26_16-32-41.png",
                "refreshment": 3
            },
            {
                "id": 5,
                "image": "refreshment_image/twitter.png",
                "refreshment": 3
            }
        ],
        "title": "t3",
        "type": "tt3",
        "charges": "754.00"
    }
]
}

Что я здесь сделал?

  1. перестроил порядок сериализатора, чтобы избежать не определено ошибки
  2. добавлено новое поле в EntertainmentSerializer классе для отображения изображений, связанных с Refreshment объектом
  3. Inviews.py Я добавил DRF, что больше подходит

Ссылки

  1. @api_view() оформитель
  2. DRF Response() класс
  3. Вложенные сериализаторы DRF
  4. source аргумент ключевого слова

Надеюсь, это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...