You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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',]
    ...

第三步:修改视图关联登录用户

核心变化在这里!我们要做两件事:

  1. 用@login_required装饰器确保只有登录用户能访问提交页面
  2. 在保存表单前,把当前登录用户赋值给问卷实例

更新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})

第四步:收尾配置和测试

  1. 运行数据库迁移:因为修改了模型,执行以下命令更新数据库:
python manage.py makemigrations
python manage.py migrate
  1. 配置登录跳转:确保你的settings.py里设置了LOGIN_URL = 'login',这样未登录用户访问问卷提交页时,会自动跳转到你的登录页面。
  2. 测试功能:登录一个用户,提交问卷,然后查看数据库里的Stressz_teszt记录,user字段应该已经关联到当前登录的用户啦~

如果还有问题,比如登录视图的实现、模板渲染的细节,随时问哦!

内容的提问来源于stack exchange,提问作者RlM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 06:53:12