Для чего мне использовать метод создания Serializer? - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь реализовать простой поток, в котором пользователь помещает секретный код в конечную точку API.Тем самым пользователь создает отношение внешнего ключа с другой моделью.

Я достиг желаемого поведения на сериализаторе, переписав метод create следующим образом:

class RegisterUserToCustomerSerializer(serializers.Serializer):
    company_code = serializers.CharField(allow_blank=False)

    def create(self, validated_data):
        user = validated_data['user']
        try:
            customer = Customer.objects.get(company_code=validated_data['company_code'])
         except Customer.DoesNotExist:
            return HttpResponse(status=404)
         user.related_customer = customer
         user.save()
         return customer

В обычном Django я быреализовали поведение на формах save(commit=False) методом.Поскольку DRF не имеет этой функции, я чувствую себя застрявшим с create() и update().

В моем решении меня действительно беспокоят две вещи:

  1. Я должен вернуть клиента из метода create, даже если пользователь был отредактирован.Но поскольку переменная 'company_code' не существует для пользователя, DRF будет из-за ошибки, если я верну пользователю
  2. , я перезаписываю метод create(), но на самом деле я ничего не создаю.Конечно, я мог бы использовать обновление, но с точки зрения дизайна, это еще хуже, я боюсь. Все, что связано с использованием метода create(), выглядит странно по этому поводу. От доступа пользователя к оператору return.

Ребята, вы видите способы избежать этого?

1 Ответ

0 голосов
/ 20 февраля 2019

Это совсем не похоже на работу для сериализатора.Обратите внимание, что вы используете простой сериализатор, который обычно не имеет методов создания или обновления;здесь нет причин создавать их.

Вы должны сделать это в представлении.

...