Django inlineformset_factory渲染错误 [英] Django inlineformset_factory rendering throwing error

查看:663
本文介绍了Django inlineformset_factory渲染错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆