django - 模型序列化器销毁方法
问题描述
我有一个名为的模型,它是Django 模型的Profile
包装器。User
现在,我ProfileSerializer
通过以下方式创建了一个:
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__'
这里的问题是,当我尝试删除配置文件时,配置文件被删除但用户仍然存在。发出删除请求时,我还需要能够删除用户。
我尝试进行一些搜索destroy
,但找不到delete
.ModelSerializer
解决方案
您可以使用以下方法在视图级别执行此操作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()
推荐阅读
- java - java.util.concurrent.ConcurrentLinkedQueue#head 初始化后如何更新?
- c - 如果在for循环中,如何检查数组输入是否为正
- java - 如何从 gradle 项目依赖项中排除 META-INF?
- python - 如何计算 PyTorch 张量的第二维中 1 和 0 的数量?
- r - 如何根据R中一列的最终数字删除一行?
- parsing - lex INDENT 和 DEDENT 传递给 Earley 的高效方法?
- kotlin - 为什么 Kotlin 中 Room 的查询功能不需要添加suspend关键字?
- node.js - Twilio 没有为可编程消息显示错误
- sql - 使用空白 NVARCHAR 或 NULL 检查 VARCHAR 索引上的 Count(*) 导致返回的行数翻倍
- angular - 检测慢速网络 Angular 9