django-模型序列化器销毁方法

时间:2018-07-21 08:28:57

标签: django serializer http-delete

我有一个名为False的模型,它是django的Profile模型的包装。现在,我通过以下方式创建了User

ProfileSerializer

这里的问题是,当我尝试删除个人资料时,该个人资料已被删除,但用户仍然留下。发出 DELETE 请求时,我还必须能够删除用户。

我尝试进行一些搜索,但是找不到class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ('first_name', 'last_name', 'email', 'password') class ProfileSerializer(serializers.ModelSerializer): user = UserSerializer(required=True) def create(self, validated_data): user_data = validated_data.pop('user') user = User.objects.create_user(**user_data, username=validated_data.get('username')) profile = Profile.objects.create(user=user, **validated_data) return profile def update(self, instance, validated_data): instance.dob = validated_data.get('dob', instance.dob) instance.karma = validated_data.get('karma', instance.karma) instance.username = validated_data.get('username', instance.username) user_data = validated_data.pop('user') instance.user.first_name = user_data.get('first_name', instance.user.first_name) instance.user.last_name = user_data.get('last_name', instance.user.last_name) instance.user.email = user_data.get('email', instance.user.email) instance.user.username = instance.username new_password = user_data.get('password') if new_password: instance.user.set_password(new_password) instance.user.save() instance.save() return instance class Meta: model = Profile fields = '__all__' 的{​​{1}}或destroy方法。

1 个答案:

答案 0 :(得分:2)

您可以使用perform_destroy方法在视图级别执行此操作:

class DetailProfile(RetrieveUpdateDestroyAPIView):
    queryset = Profile.objects.all()
    serializer_class = ProfileSerializer
    lookup_field = 'username'
    lookup_url_kwarg = 'username'

    def perform_destroy(self, instance):
        user = instance.user
        instance.delete()
        user.delete()