Как сохранить список объектов в DRF

Я новичок в джанго. У меня есть следующая модель:

class Standup(models.MOdel):
    team = models.ForeignKey("Team", on_delete=models.CASCADE)  
    standup_time = models.DateTimeField(auto_now_add=True)  
    employee = models.ForeignKey("Employee", on_delete=models.CASCADE)
    update_time = models.DateTimeField(auto_now_add=True)
    status = models.CharField(max_length=50)
    work_done_yesterday = models.TextField()
    work_to_do = models.TextField()
    blockers = models.TextField()

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

class StandupSerializer(serializers.ModelSerializer):
    class Meta:
        model = Standup
        fields = '__all__'  

Видсет такой:

class StandupDetail(viewsets.ModelViewSet):
    queryset =  Standup.objects.all()
    serializer_class = StandupSerializer 

Моя задача — сделать единый API, который будет сохранять данные всех сотрудников, а не сохранять данные сотрудников по отдельности. В текущей реализации каждому сотруднику придется обращаться к API отдельно, чтобы сохранить данные в базе данных. Каждый сотрудник сначала выбирает команду, так как один сотрудник может быть частью нескольких команд. Мы сохраним список объектов. Любые руководства о том, как это сделать?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
63
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Django предоставляет метод bulk_create для достижения этой цели.

Например, вы можете поместить приведенную ниже функцию в соответствующий класс в наборе представлений:

def bulk_update_standup(self, request, *args, **kwargs):
    standup_list = request.data.get("standupList", [])
    qs = []
    for item in standup_list:
        serializer = StandupSerializer(data=item)
        standup_instance = Standup(**serializer.validated_data)
        qs.append(standup_instance)

    Standup.objects.bulk_create(qs)
    data = {"data": None, "message": "Saved Successfully"}
    return Response(data=data, status=status.HTTP_200_OK)
Ответ принят как подходящий

Вы можете переопределить метод создания.

    def create(self, request, *args, **kwargs):
      if isinstance(request.data, list):
        serializer = self.get_serializer(data=request.data, many=True)
      else:
        serializer = self.get_serializer(data=request.data)
      serializer.is_valid(raise_exception=True)
      self.perform_create(serializer)
      headers = self.get_success_headers(serializer.data)
      return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

Попробуйте передать список данных в теле запроса. Вам необходимо изменить свой сериализатор, а также переопределить создание для массового создания и сохранения данных. Вы можете следить за этим. https://www.django-rest-framework.org/api-guide/serializers/#customizing-multiple-create

Другие вопросы по теме