Я пытаюсь реализовать простой поток, в котором пользователь помещает секретный код в конечную точку 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()
.
В моем решении меня действительно беспокоят две вещи:
- Я должен вернуть клиента из метода create, даже если пользователь был отредактирован.Но поскольку переменная 'company_code' не существует для пользователя, DRF будет из-за ошибки, если я верну пользователю
- , я перезаписываю метод
create()
, но на самом деле я ничего не создаю.Конечно, я мог бы использовать обновление, но с точки зрения дизайна, это еще хуже, я боюсь. Все, что связано с использованием метода create()
, выглядит странно по этому поводу. От доступа пользователя к оператору return.
Ребята, вы видите способы избежать этого?