Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 ModelForm中_Python_Django_Django Models_Django Forms_Listfield - Fatal编程技术网

Python 列表字段未保存在Django ModelForm中

Python 列表字段未保存在Django ModelForm中,python,django,django-models,django-forms,listfield,Python,Django,Django Models,Django Forms,Listfield,我在Django中有两个包含列表字段的模型:Polygon和PolygonForm以及Line和LineForm。当我从用户那里获得一堆信息时,我会使用以下方法创建其中的新信息: partialPolygon = Polygon(user=1001) polygon = PolygonForm(request.POST.copy(), instance=partialPolygon) polygon.data['line_ids'] = json.loads(polygon.data['line

我在Django中有两个包含列表字段的模型:Polygon和PolygonForm以及Line和LineForm。当我从用户那里获得一堆信息时,我会使用以下方法创建其中的新信息:

partialPolygon = Polygon(user=1001)
polygon = PolygonForm(request.POST.copy(), instance=partialPolygon)
polygon.data['line_ids'] = json.loads(polygon.data['line_ids'])
polygon.data['order'] = json.loads(polygon.data['order'])
newPoly = polygone.save()

newLine = Line(line_id=lineId, 
    point_list=line['point_list'], 
    ... 
    polygons=sect['polygons'],
    user=1001)
newLine.save()
这里的第二种方法非常有效。一切都保存得很好。第一种方法在大多数情况下都很有效,但总是为ListFields而不是传递给它的列表保存空列表。我甚至可以做到:

print polygon.data['line_ids']
然后它打印出一个列表[u'bla-bla',u'bla-bla',…]


你知道为什么第一种方法不能正确保存列表吗?提前谢谢

我想你需要交换这条线

polygon.data['line_ids'] = json.loads(polygon.data['line_ids'])
用这个

polygon.line_ids = json.loads(polygon.data['line_ids'])

将ListField添加到模型时,需要告诉它如何显示为表单,并将输入作为表单输入。在我的模型中,我使用json.loads和json.dumps将列表转换为文本以进行表单输入。因此,当ModelForm将表单作为输入并试图保存它时,它需要的是字符串,而不是原始列表。

这不会改变任何东西。我认为任何一种方法都可以。试过了,也没用