python - 如何将登录的(经过身份验证的)用户分配给他们提交的表单数据?
问题描述
我正在使用 Django 开发员工反馈界面。他们应该能够登录并提交投诉。该投诉应该与提交它的用户一起存储在数据库中作为属性。
我试图以某种方式将用户传递给表单,以便表单保存经过身份验证的用户的用户名,但我无法将数据从视图传递到表单。我已经能够将 ModelChoiceField() 集成到 ModelForm 中,但这让经过身份验证的用户可以操纵与投诉相关联的用户名。
模型.py:
from django.db import models
from django.contrib.auth.models import User
class Complaint(models.Model):
complaint_text = models.CharField(max_length=1000, default='')
switch_schedule_yes_or_no = models.BooleanField(default=True)
user = models.ForeignKey(User, default=1, on_delete=models.CASCADE)
视图.py:
from .forms import ComplaintForm
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
@login_required()
def complaint_view(request):
form = ComplaintForm(request.POST)
if form.is_valid():
form.save()
form = ComplaintForm()
context = {
'form': form,
}
return render(request, 'complaint.html', context)
表格.py:
from django import forms
from .models import Complaint
from django.contrib.auth.models import User
class ComplaintForm(forms.ModelForm):
complaint_text = forms.CharField(max_length=1000)
switch_schedule_yes_or_no = forms.BooleanField()
user = forms.ModelChoiceField(queryset=User.objects.all())
class Meta:
model = Complaint
fields = ['complaint_text', 'switch_schedule_yes_or_no', 'user']
如果有可能以某种方式设计这是一种允许投诉与经过身份验证的用户相关联的方式,那将是惊人的!无论是通过将参数从视图传递到表单还是使用用户个人 URLS。这几天我一直在尝试解决这个问题。
干杯!
解决方案
您可以使用request.user
来访问经过身份验证的用户并与您的Complaint
对象关联。您不需要表单user
中的字段ComplaintForm
。
@login_required()
def complaint_view(request):
form = ComplaintForm(request.POST)
if form.is_valid():
complaint = form.save(commit=False) #don't commit to DB
complaint.user = request.user #access the user
complaint.save() # save and commit to DB
form = ComplaintForm()
context = {
'form': form,
}
return render(request, 'complaint.html', context)
推荐阅读
- git - 如何为“git-together.active”添加配置值
- visual-studio - Visual Studio 不会将 .pdb 文件复制到 Appx 文件夹中
- swift - 当通过按钮选择释放文本字段焦点并关闭键盘时,WKWebView 具有与键盘区域一样多的空白区域
- sql - 尝试在 oracle 中创建导入/导出时出错
- c# - 如何管理具有位置的列表中的项目
- anylogic - 在 Seize 块中配置嵌入式队列
- javascript - 限制 contenteditable 元素删除最后一个子节点
- javascript - D3/Angular 中的大型力有向图数据集
- c# - 如何更快地二值化图片
- html - SVG Favicon 不会在 React 中调整大小