简体   繁体   中英

Django inlineformset_factory rendering throwing error

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 (eg def create_invoice(...) ), and CamelCase for class names (eg class CreateInvoice(...) , CreateInvoiceFormSet , ...)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM