首页 > 解决方案 > Django:如何创建用户并设置其相关字段

问题描述

我已经使用另一个模型(OneToOne 关系)扩展了用户数据,并且在创建用户时,也会创建其配置文件。我想在没有查询的情况下创建用户时更新字段邮件。

模型.py

class Profile(models.Model):
    user         = models.OneToOneField(User, on_delete=models.CASCADE)
    mailing      = models.BooleanField(default=False)

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

视图.py

def register(request):
    ...   
     if user_form.is_valid() and profile_form.is_valid():
        user = user_form.save(commit=False)
        user.mailing = profile_form.cleaned_data['mailing']
        user.save() #The user is created but mailing is not set
        return redirect('login')

profile_backend.py

class ProfileBackend(ModelBackend):
    def get_user(self, user_id):
        UserModel = get_user_model()
        try:
            return UserModel._default_manager.select_related('profile').get(pk=user_id)
        except UserModel.DoesNotExist:
            return None

我可以设置以用户为对象的变量,但这意味着使用额外的函数。

标签: pythondjango

解决方案


@receiver(post_save, sender=User)
def create_or_update_user_profile(sender, instance, created, **kwargs):
    if created:
        profile_id = uuid.uuid1().hex #for unique id if any
        Profile.objects.create(user=instance,profile_id=profile_id)
    instance.profile.save()

这是我的示例代码之一。这可能会帮助你。


推荐阅读