我正在尝试实现一个简单的流程,在该流程中,用户将秘密代码发布到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()
方法,但实际上并没有创建任何东西。当然,我可以使用更新,但是就设计而言,这使我担心的情况更加糟糕。 关于使用create()
方法的所有事情对此都很奇怪。从访问用户到return语句。你们看到避免这种情况的方法了吗?
答案 0 :(得分:0)
这根本不适合串行器的工作。请注意,您使用的是普通的序列化程序,该序列化程序通常根本没有创建或更新方法。没有理由在这里创建它们。
您应该在视图中执行此操作。