gpt4 book ai didi

django - Rest-auth 中的自定义用户模型 : RelatedObjectDoesNotExist

转载 作者:行者123 更新时间:2023-12-02 09:14:32 25 4
gpt4 key购买 nike

我正在尝试使用 django rest-auth 来实现注册图书馆。我遵循了安装和使用指南中的每一条说明,包括带有 custom user serializer 的部分。 。和这里问题就开始了。我们注册一个新用户,确认电子邮件,当我尝试更新用户时,我收到相同的错误:

"RelatedObjectDoesNotExist at /rest-auth/user/ User has no userprofile."

我不知道如何进行注册以同时创建用户和个人资料。 我知道这个问题以前已经被问过,但我没有找到任何可以解释为什么会发生这种情况的内容。我正在寻找使用 django-rest-auth 和自定义用户模型进行注册的简单工作示例

模型.py:

class UserProfile(models.Model): 
user = models.OneToOneField(User, primary_key=True, related_name='profile')
tagline = models.CharField(max_length=140, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

@receiver(post_save, sender=User)
def create_profile_for_user(sender, instance=None, created=False, **kwargs):
if created:
UserProfile.objects.get_or_create(user=instance)

@receiver(pre_delete, sender=User)
def delete_profile_for_user(sender, instance=None, **kwargs):
if instance:
user_profile = UserProfile.objects.get(user=instance)
user_profile.delete()

序列化器.py

class UserSerializer(UserDetailsSerializer):
curriculumVitaeLink = serializers.CharField(source="userprofile.curriculumVitaeLink", required=False)
class Meta(UserDetailsSerializer.Meta):
fields = UserDetailsSerializer.Meta.fields + (
'curriculumVitaeLink'
)

def update(self, instance, validated_data):
profile_data = validated_data.pop('userprofile', {})
curriculumVitaeLink = profile_data.get('curriculumVitaeLink')
instance = super(UserSerializer, self).update(instance, validated_data)

# get and update user profile
profile = instance.userprofile
if profile_data :
profile.curriculumVitaeLink = curriculumVitaeLink
profile.save()
return instance

def destroy(self, request, pk=None, **kwargs):
request.user.is_active = False
request.user.save()
return Response(status=204)

最佳答案

这里的

RelatedObjectDoesNotExist错误意味着在创建User对象时,信号没有创建相应的UserProfile对象。根据问题中的代码片段,可能是因为信号是如何定义的:

Django 信号需要在模块级别定义,而不是作为模型实例方法 - 您需要将缩进向左移动:

 class UserProfile(models.Model): 
user = models.OneToOneField(User, primary_key=True,
related_name='profile')
tagline = models.CharField(max_length=140, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)


@receiver(post_save, sender=User)
def create_profile_for_user(sender, instance=None, created=False, **kwargs):
if created:
UserProfile.objects.get_or_create(user=instance)

这样,UserUserProfile 对象都应该在注册时创建。

关于django - Rest-auth 中的自定义用户模型 : RelatedObjectDoesNotExist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48815250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com