Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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 为什么我的request.post对象在调用.copy()后不可变?_Python_Django_Django Forms - Fatal编程技术网

Python 为什么我的request.post对象在调用.copy()后不可变?

Python 为什么我的request.post对象在调用.copy()后不可变?,python,django,django-forms,Python,Django,Django Forms,我有一个ModelForm的HTML视图,我试图获取一个单独的用户输入,称为scanner\u input,在上面运行一些代码,然后用我刚才运行的代码的结果替换request.post['product\u id'] ,它说了同样的事情,request.post对象可以通过使用.copy进行修改,但我收到以下错误消息: 'SerialInstanceForm' object does not support item assignment 从我的观点来看,错误发生在此行中: post['pro

我有一个ModelForm的HTML视图,我试图获取一个单独的用户输入,称为scanner\u input,在上面运行一些代码,然后用我刚才运行的代码的结果替换request.post['product\u id']

,它说了同样的事情,request.post对象可以通过使用.copy进行修改,但我收到以下错误消息:

'SerialInstanceForm' object does not support item assignment
从我的观点来看,错误发生在此行中:

post['product_id'] = scanner_input_list[i]
以下是我的看法:

def SerialMulti(request):
    if request.method == "POST":
        form = SerialInstanceForm(request.POST)
        if form.is_valid():
            scanner_input = request.POST['scanner_input']
            scanner_input_list = scanner_input.splitlines()

            for i in range(0, len(scanner_input_list)):
                post = SerialInstanceForm(request.POST.copy())
                post['product_id'] = scanner_input_list[i]
                post.save()

        return render(request, 'serial_multi.html', {'form': form})
    else:
        form = SerialInstanceForm()
    return render(request, 'serial_multi.html', {'form': form})
我的模型:

class ProductSerialInstance(models.Model):
    STATUS_CHOICES = (
        ('in_inventory', 'In Stock'),
        ('given_out', 'Given Out'),
        ('repair', 'Repair')
    )

    name = models.ForeignKey(ProductSerial)
    employee = models.ForeignKey(Employee, blank=True, null=True)
    it_dep = models.ForeignKey(ItDep)
    product_id = models.CharField(max_length=50)
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='draft')
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.name
我的表格:

class SerialInstanceForm(forms.ModelForm):
    # duplications = forms.IntegerField()
    class Meta:
        model = ProductSerialInstance
        fields = ['name','employee','it_dep','status']

根据你说的,我根据我认为应该的方式编辑了你的观点, 我不知道这是否有效,但肯定能帮助你理解一些事情

获取数据时,不需要使request.POST可变

def SerialMulti(request):
    if request.method == "POST":
        form = SerialInstanceForm(request.POST)
        if form.is_valid():
            scanner_input = request.POST.get('scanner_input')
            scanner_input_list = scanner_input.splitlines()

            for i in range(0, len(scanner_input_list)):
                #edited here to make multiple instances save.
                post = ProductSerialInstance.objects.create(**form.cleaned_data)
                post.product_id = scanner_input[i]
                post.save()

        return render(request, 'serial_multi.html', {'form': form})
    else:
        form = SerialInstanceForm()
    return render(request, 'serial_multi.html', {'form': form})

1.那一行不在你发布的代码中。2.post不是post副本,它是一个SerialInstanceForm。3.SerialInstanceForm没有product\u id属性。@jonrsharpe你说得对,我错加了一行。我已将问题编辑为正确的。产品标识是否需要在表单中?在模型里还不够吗?这个想法是,我不想把它放在表单中,而是想要一个单独的文本字段,在这里你可以输入多个产品id,用换行符分隔,然后我把它们放在一个列表中,并为列表中的每个产品id创建数据库记录。希望这是有道理的。谢谢你的帮助!你到底想达到什么目的?给出一些虚拟数据的例子。。此外,在您看来,除了post问题,您只是在循环相同的数据。为什么要这样做?@FazilZaid我希望用户能够添加多个共享相同数据但具有不同产品id的记录。因此,用户可以输入name=Magic Mouse,employee=John,it_dep=CPH,status=On loan,然后在文本字段中输入abc\n def\n ghi\n。当用户提交时,它将获取该字符串,在每个字符串上进行拆分,\n并创建相同的数据库记录,但具有不同的产品id。谢谢。我已经测试过了,当有多条记录时,它只添加了一条记录,并且值不正确,但至少它保存了一些东西!我会认真考虑你的建议,等我的建议奏效后再批准。谢谢那太好了!在保存的值中仍然有一个小错误,但我确信这只是我使用的.splitlines。谢谢你的帮助!很高兴我能帮上忙!!对于那些想知道正确答案的人来说,post.product\u id=scanner\u input[i]只需更改为post.product\u id=scanner\u input\u list[i]即可。