我正在使用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。我已经尝试解决这几天了。
干杯!
您可以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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句