gpt4 book ai didi

python - 在使用 ModelForm 创建的表单对象中设置用户字段

转载 作者:行者123 更新时间:2023-11-30 23:46:23 25 4
gpt4 key购买 nike

我有一个注册表单,当用户在其中输入有效的注册数据时,它会登录用户并将用户重定向到另一个表单以输入更多数据。这个新表单包含有关用户的更多数据,并使用下面的 ModelForm 类创建:

class UserProfileAddForm(ModelForm):
class Meta:
model = UserProfile
exclude = ('user')

UserProfile 模型如下所示:

class UserProfile(models.Model):
GRADE_YEAR_CHOICES = (
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
('GR', 'Graduate')
)

school = models.CharField(max_length=64)
grade_year = models.CharField(max_length=2, choices=GRADE_YEAR_CHOICES)
gpa = models.DecimalField(decimal_places=2, max_digits=6, blank=True, null=True)
user = models.ForeignKey(User, unique=True)

其中用户字段是 Django 用户对象的外键。我很难将用户字段设置为发出请求的用户。这是我在views.py中尝试过的内容

第一次尝试:

def more(request):
if request.method == 'POST':
form = UserProfileAddForm(request.POST)
if form.is_valid():
form.save(commit=False)
form.user = request.user
form.save()
return HttpResponseRedirect('/register/success/')
else:
form = UserProfileAddForm()
variables = RequestContext(request, {
'form': form

第二次尝试:

def more(request):
if request.method == 'POST':
form = UserProfileAddForm(request.POST)
if form.is_valid():
form.save(commit=False)
form.user = User.objects.filter(username=request.user)
form.save()
return HttpResponseRedirect('/register/success/')
else:
form = UserProfileAddForm()
variables = RequestContext(request, {
'form': form
})
return render_to_response('registration/more.html', variables)

无论我尝试哪种方式,它似乎都没有将数据保存到数据库中。但是,它会将我重定向到成功页面,就像保存成功一样。

最佳答案

form.save() 返回正在保存的模型的实例。您需要在那里设置用户,然后保存该实例。

profile = form.save(commit=False)
profile.user = request.user
profile.save()

请注意,根据 request.user 的值从数据库获取用户是没有意义的,因为 request.user 已经是正确的 User 对象。

关于python - 在使用 ModelForm 创建的表单对象中设置用户字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9056455/

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