我将Serializer创建方法用于什么?

时间:2019-02-20 07:28:28

标签: django django-rest-framework

我正在尝试实现一个简单的流程,在该流程中,用户将秘密代码发布到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 :(得分:0)

这根本不适合串行器的工作。请注意,您使用的是普通的序列化程序,该序列化程序通常根本没有创建或更新方法。没有理由在这里创建它们。

您应该在视图中执行此操作。