Django新手技术求助:如何实现登录用户的问卷答案与用户账号关联
解决Django问卷系统关联登录用户的问题
嘿,很高兴能帮到你!你的需求其实非常常见,咱们一步步来调整代码,让提交的问卷自动关联到当前登录的用户~
第一步:修正模型的关联字段
首先看你的models.py,外键字段命名user_name有点混淆(它关联的是User对象,不是单纯的用户名),而且设置default=1会导致未登录时也能保存记录,这不符合你的需求。咱们调整一下:
from django.db import models from django.contrib.auth.models import User class Stressz_teszt(models.Model): def __str__(self): return self.stressz_name # 重命名字段为user,移除默认值(登录用户会自动赋值) user = models.ForeignKey(User, on_delete=models.CASCADE) stressz_name = models.CharField(max_length=200) stressz_company = models.CharField(max_length=300) stressz_v01 = models.IntegerField() stressz_v02 = models.IntegerField() stressz_v03 = models.IntegerField() stressz_v04 = models.IntegerField() stressz_v05 = models.IntegerField() ...
第二步:确保表单不包含用户字段
你的forms.py已经没把user字段加入表单,这很好!如果之后模型加了其他字段,记得要么明确列出需要用户填写的字段,要么用exclude=['user']直接排除用户字段:
from django import forms from django.forms import ModelForm from .models import Stressz_teszt class StresszForm(forms.ModelForm): class Meta: model = Stressz_teszt # 只保留需要用户填写的字段,排除user fields = ['stressz_name', 'stressz_company', 'stressz_v01', 'stressz_v02', 'stressz_v03', 'stressz_v04', 'stressz_v05',] ...
第三步:修改视图关联登录用户
核心变化在这里!我们要做两件事:
- 用
@login_required装饰器确保只有登录用户能访问提交页面 - 在保存表单前,把当前登录用户赋值给问卷实例
更新views.py:
from django.shortcuts import render, redirect from .models import Stressz_teszt from .forms import StresszForm # 导入登录验证装饰器 from django.contrib.auth.decorators import login_required # 添加装饰器,未登录用户会自动跳转到登录页 @login_required def stressz_item(request): form = StresszForm(request.POST or None) if form.is_valid(): # 先获取表单实例但不保存到数据库(commit=False) stressz_record = form.save(commit=False) # 关联当前登录的用户(request.user就是当前登录的User对象) stressz_record.user = request.user # 现在再保存到数据库 stressz_record.save() # 注意:redirect的参数应该是urls里定义的name,不是模板路径!比如你原来写的'stressz/login.html'不对,应该用'login'(对应urls里的name='login') return redirect('login') return render(request, 'stressz/stressz-form.html', {'form':form})
第四步:收尾配置和测试
- 运行数据库迁移:因为修改了模型,执行以下命令更新数据库:
python manage.py makemigrations python manage.py migrate
- 配置登录跳转:确保你的
settings.py里设置了LOGIN_URL = 'login',这样未登录用户访问问卷提交页时,会自动跳转到你的登录页面。 - 测试功能:登录一个用户,提交问卷,然后查看数据库里的
Stressz_teszt记录,user字段应该已经关联到当前登录的用户啦~
如果还有问题,比如登录视图的实现、模板渲染的细节,随时问哦!
内容的提问来源于stack exchange,提问作者RlM
相关产品推荐
相关产品推荐

