如何解决如何修复缺少 1 个必需的位置参数“请求”错误?
类型错误在 /risk/riskset get_context_data() 缺少 1 个必需的位置参数:“请求”。
在此处查看代码: 模型.py
class RiskSet(models.Model):
name = models.CharField('Risk set',max_length=500,blank=True,default = '')
owner = models.ForeignKey(User,verbose_name = 'owner',on_delete=models.PROTECT,null=True)
risk = models.ForeignKey(Risk,verbose_name = 'risk',null = True)
parent_risk_set = models.ForeignKey('self',related_name="child_risk_set",null=True)
def __str__(self):
return "{}".format(self.name)
forms.py
class RiskSetForm(forms.ModelForm):
RiskID1 = forms.ModelMultipleChoiceField(queryset=Risk.objects.all(),required=True,widget=forms.SelectMultiple(attrs={'class': 'select2'}),label = 'Risk id')
def __init__(self,*args,**kwargs):
super(RiskSetForm,self).__init__(*args,**kwargs)
print(self)
for visible in self.visible_fields():
visible.field.widget.attrs['class'] = 'form-control'
class Meta:
model = RiskSet
fields = ['name','owner','risk','parent_risk_set']
views.py
class RiskSet(FormView,SingleTableMixin):
template_name = "risk/RiskSet.html"
model = RiskSet
form_class = RiskSetForm
def get_context_data(self,request):
form = RiskSetForm(request.POST or None)
if form.is_valid():
form.save()
# Call the base implementation first to get a context
context = super().get_context_data(**kwargs)
# Add in a QuerySet of all the books
context['page'] = 'risk'
return context
现在出现错误:
类型错误在 /risk/riskset get_context_data() 缺少 1 个必需的位置参数:“请求”
请帮忙!
解决方法
get_context_data
与 request
参数不一起工作。您可以传递任意数量的参数,但此处您的 get_context_data
仅在随请求调用时才会运行。您使用 self.request
访问请求:
class RiskSet(SingleTableMixin,FormView):
template_name = "risk/RiskSet.html"
model = RiskSet
form_class = RiskSetForm
def get_context_data(self,*args,**kwargs):
form = RiskSetForm(self.request.POST or None)
if form.is_valid():
form.save()
# Call the base implementation first to get a context
context = super().get_context_data(*args,**kwargs)
# Add in a QuerySet of all the books
context['page'] = 'risk'
return context
此外,在 get_context_data
方法中执行此操作毫无意义。 FormView
已为此设置了例程。您可能还可以使用 CreateView
来删除更多样板代码,例如:
from django.views.generic import CreateView
class RiskSet(SingleTableMixin,CreateView):
template_name = "risk/RiskSet.html"
model = RiskSet
form_class = RiskSetForm
success_url = 'path-to-url-when-form-is-valid'
def get_context_data(self,**kwargs):
context = super().get_context_data(*args,**kwargs)
# Add in a QuerySet of all the books
context['page'] = 'risk'
return context
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。