【问题标题】:Django associate form values to userDjango 将表单值与用户关联
【发布时间】:2021-02-09 14:44:12
【问题描述】:

我对 Django 很陌生,但我开始创建一个项目,我需要一些帮助。我的问题很基本,但我找不到正确的答案。

我做了一个工作正常的问卷,但如果登录用户添加他的答案,我不知道该怎么做 Django 将答案与用户关联。

Views.py

from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.template import loader
from .models import Stressz_teszt
from .forms import StresszForm
from django.forms import ModelForm

def stressz_item(request):
form = StresszForm(request.POST or None)

if form.is_valid():
    form.save()
    return redirect('stressz/login.html')

return render(request, 'stressz/stressz-form.html', {'form':form})

Urls.py

from . import views
from django.urls import path
from django.forms import ModelForm
    
urlpatterns = [
    path('', views.index, name='index'),
    path('login/', views.login, name='login'),
    
    #stressz teszt form
    path('add', views.stressz_item, name='stressz_item'),
    path('<int:item_id>/', views.detail, name='detail'),

Forms.py

from django import forms
from django.forms import ModelForm
from .models import Stressz_teszt

class StresszForm(forms.ModelForm):
    class Meta:
        model = Stressz_teszt
        fields = ['stressz_v01', 'stressz_v02', 'stressz_v03', 'stressz_v04', 'stressz_v05',] ... 

Models.py

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_name = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
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()
...

提前谢谢你!

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    你可以这样做:

    def stressz_item(request):
        if form.is_valid():
            stressz_teszt = form.save(commit=False)
            stressz_teszt.user_name = request.user
            stressz_teszt.save()
            return redirect('stressz/login.html')
        return render(request, 'stressz/stressz-form.html', {'form': form})
    

    【讨论】:

    • 谢谢!它保存表单,但用户字段为空。
    • 您确定用户已通过身份验证吗?尝试打印request.user
    • 我想我找到了问题所在。如果我从管理面板创建一个新用户,它工作正常,但如果我使用注册表单,用户可以登录,但新用户不会出现在管理面板中。这让我很困惑。我发现 vs 代码用黄色下划线所以它找不到我的用户模块但我不知道为什么,我找不到任何错误。从用户导入视图为 user_views
    猜你喜欢
    • 2018-09-03
    • 2013-12-10
    • 2013-09-13
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    相关资源
    最近更新 更多