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

Настройка сериализатора модели для многих полей в Django

Мне нужно некоторое руководство по реализации сериализаторов для моделей, содержащих много полей, в обобщенном виде. Предположим, у меня есть следующие (сильно упрощенные) модели:

class Operative(models.Model):
    name = models.CharField(max_length=256, blank=False)    
    email = models.EmailField(unique=True, null=True)
    desiganation = models.PositiveSmallIntegerField(default=0, choices=((0, 'Operative'), (1, 'Manager'), (2, 'Owner')))


class Task(models.Model):
    title = models.CharField(max_length=256, blank=False)
    manager = models.ForeignKey(Operative, null=True,on_delete=models.SET_NULL)
    operatives = models.ManyToManyField(Operative, blank=True)
    deadline = models.DateTimeField(null=True, blank=True)

Теперь, если у меня есть такой сериализатор:

class TaskSerializer(ModelSerializer):

    class Meta:
        model = Task
        fields = ('id', 'title', 'manager', 'operatives', 'deadline')
        read_only_fields = ('id',)

Каков наилучший подход к обработке запросов на обновление, содержащих целочисленные идентификаторы для менеджера и оперативников? API обновления будет получать POST-запросы, содержащие данные json, например:

{
    "id": 1002,
    "title": "Task1",
    "deadline": "2018-09-15T15:53:00+05:00",
    "manager": 55,
    "operatives": [102, 110, 324]
}

Я хотел бы реализовать настраиваемую логику для внешних ключей и многих полей внутри сериализатора. В настоящее время я использую некоторые вспомогательные методы в представлении, чтобы получить/установить идентификаторы для оперативников и менеджера, и это кажется немного неуклюжим.


Ответы:


1

ниже не работает?

class TaskSerializer(ModelSerializer):

    manager = serializers.PrimaryKeyRelatedField()
    operatives = serializers.PrimaryKeyRelatedField(many=True)

    class Meta:
        model = Task
        fields = ('id', 'title', 'manager', 'operatives', 'deadline')
        read_only_fields = ('id',)
17.09.2018
  • Вы это сами проверяли? Я пытаюсь найти время, чтобы протестировать его в своей кодовой базе. 24.09.2018
  • Нет, я не проверял — просто предположение, основанное на интуитивной природе DRF. 25.09.2018

  • 2

    ModelSerializer обрабатывает внешние ключи и отношения «многие ко многим». Вы должны переопределить методы create(self, validated_data) и update(self, instance, validated_data), чтобы настроить сохранение и управление данными.

    23.09.2018
    Новые материалы

    Как симулировать серию пенальти на Python с помощью симуляции Монте-Карло, часть 1: генерация функций
    Серия пенальти была огромным испытанием во время чемпионата мира по футболу. Они вызвали много споров в социальных сетях и новостных агентствах. Даже финальный матч турнира решался по..

    AST для разработчиков JavaScript
    TL; DR Эта статья - мое выступление на недавно состоявшейся конференции Stockholm ReactJS Meetup. Вы можете посмотреть слайды здесь..

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

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

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

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

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