gpt4 book ai didi

django - 在用户保存时更新用户配置文件

转载 作者:行者123 更新时间:2023-12-02 17:22:42 25 4
gpt4 key购买 nike

我正在按照 'User profile' 方法扩展我的用户模型,如下所示:

# models.py
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE, primary_key=True)
my_field = models.CharField(max_length=100)

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

使用这种方法,我必须显式调用 user.profile.save(),这对我来说感觉很笨拙,因为我希望 profile 给人一种错觉是 User 对象的一部分:

# views.py
def some_func(request):
user = User.objects.create_user('dummy', 'dummy@dummy.com', '12345678')
user.profile.my_field = 'hello'
user.save() # This does not persist the profile object...
user.profile.save() # ...this does

为了解决这个问题,我将 create_user_profile() 更改为以下内容,该方法有效:

# signals.py
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
profile = UserProfile.objects.get_or_create(user=instance)
profile.save()

我遇到的许多例子都没有使用这种方法。使用这种方法有什么注意事项吗?

最佳答案

更好的方法是指定自定义用户模型。

from django.contrib.auth.models import AbstractUser
from django.db import models

class User(AbstractUser):
custom_field = models.ForeignKey(
'contracts.Contract'
)
...

class Meta(AbstractUser.Meta):
swappable = 'AUTH_USER_MODEL'

您必须更新定义 AUTH_USER_MODEL 属性的 settings.py:

AUTH_USER_MODEL = 'app_name.User'

关于django - 在用户保存时更新用户配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41479943/

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