这是models.py代码
class Profile(models.Model):
user = models.ForeignKey(User, unique=True, on_delete=models.CASCADE, related_name='profile')
@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
instance.profile.save()
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
# Profile.objects.save()
instance.profile.save()
和这个views.py代码:
def signup(request):
....
if request.method == "POST":
user_form = UserRegistrationForm(request.POST)
if user_form.is_valid():
user = user_form.save(commit=False)
user.save(using='default')
login(request, user)
return HttpResponse("User Loged In")
答案 0 :(得分:2)
您从ForeignKey
到Profile
定义了User
,但这意味着每个Profile
都附加到 a {{1}但是,多个 User
完全可以附加到相同的 Profile
。
因此,如果您使用User
,则不会返回单 a_user.profile
,而是Profile
:一位经理管理RelatedManager
的集合(可包含零个,一个或多个元素)。
但我认为您确实希望将Profile
与不同 Profile
相关联,在这种情况下,您最好使用OneToOneField
:
User
如果您随后查询class Profile(models.Model):
user = models.OneToOneField(User, unique=True, on_delete=models.CASCADE)
,您将获得someuser.profile
个实例,或者如果没有与该用户相关联的个人资料,则会引发Profile
错误。
默认情况下,Profile.DoesNotExists
的{{1}}是小写的类名,因此您不再需要指定它。
但请注意,在您的代码related_name
中,不是是必要的,因为OneToOneField
基本上已经通过创建来保存:
instance.profile.save()