Python - DRF возвращает количество строк, но не данные или структуру - PullRequest
0 голосов
/ 02 апреля 2020

Я новичок в Python и Django программировании, и у меня есть эта проблема с тестовым API, который я делаю для целей обучения. Моя проблема заключается в том, что когда я делаю запрос get на мой API, я получаю следующий ответ:

[
    {},
    {}
]

Иерархия каталогов моего приложения такова (как вы можете видеть, я создал модуль для моего django Модели)

── __init__.py
├── __pycache__
├── adapters.py
├── admin.py
├── apps.py
├── managers.py
├── migrations
├── models
│   ├── __init__.py
│   ├── car.py
├── serializers.py
├── tests.py
├── urls.py
└── views.py

так, в моделях / init у меня есть:

from .car import *

в моделях / car.py:

class Size(models.Model):
description = models.CharField(max_length=200, null=True, blank=True)
height = models.DecimalField(max_digits=3, decimal_places=2, null=True, blank=True)
width = models.DecimalField(max_digits=3, decimal_places=2, null=True, blank=True)

в serializers.py:

class SizeSerializer(serializers.Serializer):
class Meta:
    model = Size
    fields = ['description']

в views.py:

class SizeList(APIView):
def get(self, request, format=None):
    size = Size.objects.all()
    serializer = SizeSerializer(size, many=True)
    return Response(serializer.data)

В моей таблице БД у меня есть 2 записи, и приложение возвращает 2 пустых объекта, я предположим, что соединение с моей базой данных работает нормально, потому что когда у меня был только один, API возвращал только 1 пустой объект. Что может быть причиной этого? У меня есть реализация аутентификации пользователя с использованием allauth в этом же проекте, и она работает просто отлично, но когда я пытаюсь реализовать эти пользовательские модели, я просто не получаю правильный ответ. Спасибо за вашу помощь!

PS: Извините за мой английский sh, я чилиец.

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Попробуйте использовать class SizeSerializer(serializers.ModelSerializer)

Разница между Serializers и ModelSerializer в основном:

Класс ModelSerializer такой же, как и обычный класс Serializer, за исключением того, что:

  • Он автоматически создаст для вас набор полей на основе модели.
  • Он автоматически сгенерирует валидаторы для сериализатора, такие как валидаторы unique_together.
  • Он включает простые реализации по умолчанию .create () и .update ().

https://www.django-rest-framework.org/api-guide/serializers/#modelserializer

0 голосов
/ 02 апреля 2020

Вам нужно использовать ModelSerializer

class SizeSerializer(serializers.ModelSerializer):
    ...
...