Хобрук: Ваш путь к мастерству в программировании

Сериализатор Django Rest Framework не отображает ВСЕ поля

У меня проблема, когда DRF неправильно отображает все мои поля для класса модели/справочной таблицы (в частности, первичного ключа).

Мой класс модели выглядит так (очень просто):

class UnitOfIssue(models.Model):
    code = models.CharField(max_length=2, primary_key=True)
    description = models.CharField(max_length=16)

    class Meta:
        ordering = ('code',)                                                                                                                                                   

    def __str__(self):
        return "{0} - {1}".format(self.code, self.description)

Мой сериализатор выглядит так:

class UnitOfIssueSerializer(serializers.HyperlinkedModelSerializer):
    """ 
    """
    url = serializers.HyperlinkedIdentityField(
            read_only=True,
            view_name='unitofissue-detail',
            format='html',
            lookup_field='code')

    class Meta:
        model = UnitOfIssue
        fields = ('code', 'description', 'url')
        # fields = '__all__'                                     

И я использую общий вид:

class UnitOfIssueDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = UnitOfIssue.objects.all()
    serializer_class = UnitOfIssueSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
    lookup_field = 'code'

Чтобы первичный ключ UnitOfIssue code отображался в автоматически сгенерированном пользовательском интерфейсе, я должен определить fields = ('code', 'description', 'url') в сериализаторе вместо fields = '__all__'.

Я хочу просто использовать синтаксис '__all__', но не могу понять, что происходит не так.

Кроме того, я использую Django==1.11.13 и djangorestframework==3.8.2.


  • сообщение об ошибке?? 09.08.2018
  • @HemanthSP не было сообщения об ошибке, и я понял, что не так, примерно через 15 минут после того, как опубликовал вопрос (конечно). 23.08.2018

Ответы:


1

Эта проблема мучила меня неделями, и все же это была такая простая ошибка. Я исправил это, изменив базовый класс сериализатора с:

class UnitOfIssueSerializer(serializers.HyperlinkedModelSerializer):

to:

class UnitOfIssueSerializer(serializers.ModelSerializer):
23.08.2018
Новые материалы

5 проектов на Python, которые нужно создать прямо сейчас!
Добро пожаловать! Python — один из моих любимых языков программирования. Если вы новичок в этом языке, перейдите по ссылке ниже, чтобы узнать о нем больше:

Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

«Очень простой» эволюционный подход к обучению с подкреплением
В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

Фишинг — Упаковано и зашифровано
Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

ВЫ РЕГРЕСС ЭТО?
Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

Не зря же это называют интеллектом
Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..