Python 如何将已登录(已验证)的用户分配给他们提交的表单数据?

Python 如何将已登录(已验证)的用户分配给他们提交的表单数据?,python,django,Python,Django,我正在与Django开发一个员工反馈界面。他们应能够登录并提交投诉。该投诉应该与作为属性提交的用户一起存储在数据库中 我试图以某种方式将用户传递到表单,以便表单保存经过身份验证的用户的用户名,但我无法将数据从视图传递到表单。 我已经能够将ModelChoiceField()集成到ModelForm中,但这允许经过身份验证的用户操纵投诉将与之关联的用户名 models.py: from django.db import models from django.contrib.auth.models

我正在与Django开发一个员工反馈界面。他们应能够登录并提交投诉。该投诉应该与作为属性提交的用户一起存储在数据库中

我试图以某种方式将用户传递到表单,以便表单保存经过身份验证的用户的用户名,但我无法将数据从视图传递到表单。 我已经能够将ModelChoiceField()集成到ModelForm中,但这允许经过身份验证的用户操纵投诉将与之关联的用户名

models.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)
views.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)
forms.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']
如果有可能以某种方式设计这是一种允许投诉与经过身份验证的用户关联的方式,那将是令人惊讶的!无论是通过将参数从视图传递到表单,还是通过使用用户单独的URL。我已经努力解决这个问题好几天了


干杯

尝试以下基于类的视图方法

在您的表单中,您可以编辑以下行:

user=forms.ModelChoiceField(queryset=user.objects.all())

从django.views导入泛型
从my_app.forms导入投诉表单
类ComplaintView(generic.CreateView):
template_name=“complaint.html”
表格\类别=投诉表格
def表单_有效(自身、表单):
form.instance.user=self.request.user#这就是您希望发生的事情
super().form_有效(form)
要添加登录要求约束,可以使用
LoginRequiredMixin

来自django.contrib.auth.mixins导入登录所需的mixin
类ComplaintView(LoginRequiredMixin,generic.CreateView):
通过

您可以使用
request.user
访问经过身份验证的用户,并与您的
投诉对象关联。您不需要
投诉表单
表单中的
用户
字段

@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)

谢谢,这非常有帮助:)它起作用了。我的提高投票率还不算,因为我的声望很低:不过我确实提高了投票率。