【发布时间】:2022-01-19 19:59:15
【问题描述】:
所以我想为每个新创建的用户保存一个传记。用户可以输入他的个人简历,并将其添加到他的个人资料中。
为此,我使用 OneToOneField 创建了一个模型
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class Profile(models.Model):
user = models.OneToOneField(
User, on_delete=models.CASCADE, null=True, blank=True)
bio = models.CharField(max_length=30)
为了创建表单,我在 forms.py 中执行了以下操作:
class BioForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('bio',)
然后我在views.py中创建了保存,所以bio会被保存到特定的用户:
from .forms import LoginForm, RegisterForm
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login, logout, get_user_model
from django.contrib.auth import get_user_model
def test_view(request):
form = BioForm(request.POST)
user = get_user_model
if form.is_valid():
profile = form.save(commit=False)
profile.user = request.user
profile.phone_number = request.phone_number
profile.save()
return render(request, 'test.html', {'form': form})
views.py 中有一些大问题,但我不明白。 我可以提交表单并且表单将被保存(有时)但没有编写它的用户 + 我收到此错误:
ValueError at /test/
Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x00000253B7140D00>>": "Profile.user" must be a "User" instance
【问题讨论】:
-
将
user = get_user_model更改为user = request.user或user = get_user_model()。 -
什么都不做
-
print(request.user)显示什么?出现错误时用户是否已登录?
标签: python django windows django-models