Django inlineformset_factory渲染错误 [英] Django inlineformset_factory rendering throwing error
问题描述
Models.py
class serviceinvoice(models.Model):
user = models.ForeignKey(User,related_name ='invoice')
invoice_number = models.PositiveIntegerField ()
#invoice_no = models.CharField(max_length = 500,default = increment_invoice_number,null = True,blank = True)
invoice_date = models.DateField()
invoice_receivable = models.ForeignKey应收款,null = True)
total_amount = models.DecimalField(decimal_places = 2,max_digits = 20)
total_amountwithtax = models.DecimalField(decimal_places = 2,max_digits = 20)
def __str __(self):
return self.invoice_number
class serviceinvoiceitems(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,related_name ='serviceinvoiceitems')
invoice_number = models.ForeignKey(serviceinvoice)
Product = models.CharField( max_length = 1000,null = True)
UOM = models.CharField(max_length = 100,null = True)
数量= models.FloatField(null = True)
Rate = models.FloatField null = True)
Tax_rate = models.FloatField(null = True)
def __str __(self):
return self.invoice_number
forms.py
createinvoiceformset = inlineformset_factory(serviceinvoice,serviceinvoiceitems,fields ='__ all__')
class createinvoice(forms.ModelForm):
class Meta:
model = serviceinvoice
exclude =('user',)
widgets = {
'invoice_date':forms.DateInput(attrs = {'class':'datepicker'}),
}
views.py
@login_required
def createinvoice(request):
如果request.method =='POST':
inv_form = createinvoice(data = request.POST)
如果inv_form.is_valid():
new_form = inv_form.save(commit = False)
new_formset = createinvoiceformset(request.POST,instance = new_form)
如果new_formset.is_valid )
new_form.save()
new_formset.save()
return HttpResponse('Invoice created')
else:
inv_form = createinvoice()
new_formset = createinvoiceformset(instance = serviceinvoice())
inv_form.fields [invoice_receivable]。queryset = Receivables.objects.filter(user = request.user)
return render(request,'account / createinvoice.html',{'inv_form':inv_form,'new_formset':new_formset})
在模板中渲染出以下错误。
_wrapped_view()缺少1个必需的位置参数:'request'
追溯
环境:
请求方法:GET
请求URL:http:// localhost:8000 / invoice / createinvoice /
Django版本:1.8.9
Python版本:3.4 .0
已安装的应用程序:
('发票',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles')
安装的中间件:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib .auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking .XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware')
追溯:
Fil eC:\Python34\lib\site-packages\django\core\handlers\base.pyin get_response
132. response = wrapped_callback(request,* callback_args,** callback_kwargs )
在_wrapped_view
中的C:\Python34\lib\contrib\auth\decorators.py文件。return view_func(request,* args ,** kwargs)
在createinvoice中的文件D:\pythonspace\tiktant\invoice\views.py
106. inv_form = createinvoice(instance = request)
异常类型:TypeError at / invoice / createinvoice /
异常值:_wrapped_view()缺少1个必需的位置参数:'request'
您的视图名称 createinvoice
与您的表单冲突 createinvoice
。它们应该是不同的。
如果您使用功能名称的下划线(例如 def create_invoice(...)
)和CamelCase类(例如 class CreateInvoice(...)
, CreateInvoiceFormSet
...)
I am trying to build a view with 2 models using inlinefactory.
Models.py
class serviceinvoice(models.Model):
user=models.ForeignKey(User,related_name='invoice')
invoice_number=models.PositiveIntegerField()
#invoice_no = models.CharField(max_length = 500, default = increment_invoice_number, null = True, blank = True)
invoice_date = models.DateField()
invoice_receivable=models.ForeignKey(Receivables,null=True)
total_amount=models.DecimalField(decimal_places=2,max_digits=20)
total_amountwithtax=models.DecimalField(decimal_places=2,max_digits=20)
def __str__(self):
return self.invoice_number
class serviceinvoiceitems(models.Model):
user=models.ForeignKey(settings.AUTH_USER_MODEL,related_name='serviceinvoiceitems')
invoice_number=models.ForeignKey(serviceinvoice)
Product=models.CharField(max_length=1000,null=True)
UOM=models.CharField(max_length=100,null=True)
Quantity=models.FloatField(null=True)
Rate=models.FloatField(null=True)
Tax_rate=models.FloatField(null=True)
def __str__(self):
return self.invoice_number
forms.py
createinvoiceformset = inlineformset_factory(serviceinvoice, serviceinvoiceitems,fields='__all__')
class createinvoice(forms.ModelForm):
class Meta:
model = serviceinvoice
exclude = ('user',)
widgets = {
'invoice_date': forms.DateInput(attrs={'class':'datepicker'}),
}
views.py
@login_required
def createinvoice(request):
if request.method == 'POST':
inv_form=createinvoice(data=request.POST)
if inv_form.is_valid():
new_form=inv_form.save(commit=False)
new_formset=createinvoiceformset(request.POST,instance=new_form)
if new_formset.is_valid():
new_form.save()
new_formset.save()
return HttpResponse('Invoice created')
else:
inv_form=createinvoice()
new_formset=createinvoiceformset(instance=serviceinvoice())
inv_form.fields["invoice_receivable"].queryset=Receivables.objects.filter(user=request.user)
return render(request,'account/createinvoice.html',{'inv_form':inv_form,'new_formset':new_formset})
This is rendered in template with following error.
_wrapped_view() missing 1 required positional argument: 'request'
Traceback
Environment:
Request Method: GET
Request URL: http://localhost:8000/invoice/createinvoice/
Django Version: 1.8.9
Python Version: 3.4.0
Installed Applications:
('invoice',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware')
Traceback:
File "C:\Python34\lib\site-packages\django\core\handlers\base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python34\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
22. return view_func(request, *args, **kwargs)
File "D:\pythonspace\tiktant\invoice\views.py" in createinvoice
106. inv_form=createinvoice(instance=request)
Exception Type: TypeError at /invoice/createinvoice/
Exception Value: _wrapped_view() missing 1 required positional argument: 'request'
Your view name createinvoice
clashes with your form createinvoice
. They should be different.
Your code would be much clearer if you used underscores for function names (e.g. def create_invoice(...)
), and CamelCase for class names (e.g. class CreateInvoice(...)
, CreateInvoiceFormSet
, ...)
这篇关于Django inlineformset_factory渲染错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!