Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django modelformset工厂“tuple”对象没有属性“author”_Python_Django - Fatal编程技术网

Python django modelformset工厂“tuple”对象没有属性“author”

Python django modelformset工厂“tuple”对象没有属性“author”,python,django,Python,Django,我试图使表单在数据发生更改时更新modelformset,但给出的错误是“tuple”对象在change\u对象中没有属性“author” def formformset_update(request,invoice_id): # Sale_Transiction_formset = modelformset_factory(SaleTransiction, form=Sale_Invoice_Main_Page_ModelForm,extra=1) if request.met

我试图使表单在数据发生更改时更新modelformset,但给出的错误是“tuple”对象在change\u对象中没有属性“author”

def formformset_update(request,invoice_id):
    # Sale_Transiction_formset = modelformset_factory(SaleTransiction, form=Sale_Invoice_Main_Page_ModelForm,extra=1)
    if request.method == 'POST':
        forms = Sale_Invoice_Main_Page_ModelForm(request.POST,instance=SaleInvoice.objects.get(invoice_no=invoice_id))
        formset = Sale_Transction_formset_Extra(request.POST, request.FILES,queryset=SaleTransiction.objects.filter(invoice_no=invoice_id))

        if formset.is_valid() and forms.is_valid():
            forms.save()
            transiction = formset.save(commit=False)
            inv_no = forms.cleaned_data['invoice_no']
            customer = forms.cleaned_data['customer']
            trans_date = forms.cleaned_data['invoice_date']
            forms.author = request.user

            # for ins in transiction:
            #     ins.invoice_no = inv_no
            #     ins.customer_transiction_name = 'class'
            #     ins.transiction_date = trans_date
            #     ins.transiction_type = 'sale'
            #     ins.author = str(request.user)
            #     ins.save()

            for obj in formset.deleted_objects:
                obj.delete()

            for objs in formset.changed_objects:

                # objs.author = request.user
                objs.customer_transiction_name = customer
                objs.transiction_date = trans_date
                objs.save()

            for ins in formset.new_objects:
                ins.invoice_no = inv_no
                ins.customer_transiction_name = customer
                ins.transiction_date = trans_date
                ins.transiction_type = 'sale'
                ins.author = request.user
                ins.save()

            return HttpResponseRedirect(reverse_lazy('saleinvoice:sale invoice home page'))
    else:
        # sale_invoice = Invoice_max.objects.get(invoice_name='sale')
        forms = Sale_Invoice_Main_Page_ModelForm(instance=SaleInvoice.objects.get(invoice_no=invoice_id))
        formset = Sale_Transction_formset_Extra(queryset=SaleTransiction.objects.filter(invoice_no=invoice_id))
    return render(request, 'saleinvoice/sale test/sale formformmodel update.html' ,{ "saleform" : forms,
                                                                       "saletransiction" : formset })

model



 class SaleInvoice(models.Model):
    customer = models.ForeignKey(Customer_data , on_delete=models.CASCADE)
    invoice_date = models.DateField(null=True,blank=True)
    invoice_no = models.PositiveIntegerField(unique=True)
    due_date = models.DateField(blank=True,null=True)
    address = models.TextField()
    total_amount = models.PositiveIntegerField(null=True,blank=True)
    description = models.TextField(null=True,blank=True)
    transiction_type = models.CharField(max_length=50,blank=True)
    author = models.CharField(max_length=30,null=True,blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return str(self.invoice_no)


class SaleTransiction(models.Model):
    invoice_no = models.PositiveIntegerField()
    customer_transiction_name = models.CharField(max_length=30)
    transiction_date = models.DateField()
    item = models.CharField(max_length=100)
    description = models.TextField(null=True,blank=True)
    price = models.PositiveIntegerField()
    quantity = models.PositiveIntegerField()
    total = models.PositiveIntegerField()
    transiction_type = models.CharField(max_length=50)
    author = models.CharField(max_length=30)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.item
形式


当我获取数据并保存数据时,然后在formset.changed_对象:循环中为objs输入。元组“对象没有属性”customer_Transaction_name是一个gen错误,这是因为changed_对象不会返回与已删除对象或新_对象类似的对象的简单列表。它返回一个元组列表,其中每个元组由对象组成,后跟一个值已更改的字段列表:

[对象,['changed_field1','changed_field2']]

因此,您需要通过指向元组中的第一项来调整代码:

for objs in formset.changed_objects:
    objs[0].customer_transiction_name = customer
    objs[0].transiction_date = trans_date
    objs[0].save()

请提供完整的回溯。我有编辑代码现在它应该有完整的回溯
for objs in formset.changed_objects:
    objs[0].customer_transiction_name = customer
    objs[0].transiction_date = trans_date
    objs[0].save()