返回现有记录,而不是创建Rest API框架

时间:2019-07-10 18:36:44

标签: python django rest django-rest-framework

在我的API中,我绑定了一个创建视图,该视图引用了另一个记录OneToOne。但是,有时用户似乎一次发送了两个请求,而第二次由于记录重复冲突而失败:

class CreateProfileLink(generics.CreateAPIView):

    def perform_create(self, serializer):

        ins = serializer.save(user=self.request.user)

    serializer_class = ProfileLinkSerializer

有没有一种方法可以覆盖create方法以返回记录(如果已存在)而不是创建记录?

1 个答案:

答案 0 :(得分:1)

您可以通过覆盖get_or_create方法来在序列化程序类中使用create()

class ProfileLinkSerializer(serializers.ModelSerializer):
    ...

    class Meta:
        model = Profile
        fields = (...)

    def create(self, validated_data):
        profile, _ = Profile.objects.get_or_create(**validated_data)
        return profile

由于您尚未提供models.py,因此我在这里使用Profile作为模型名称。如果项目中的内容不同,请确保将其替换。