我在Django中有两个包含ListFields的模型: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',...]。
知道第一种方法为什么不能正确保存列表?提前谢谢!
答案 0 :(得分:0)
我想你需要交换这一行
polygon.data['line_ids'] = json.loads(polygon.data['line_ids'])
用这个
polygon.line_ids = json.loads(polygon.data['line_ids'])
答案 1 :(得分:0)
将ListField添加到模型时,需要告诉它如何显示为表单,并将输入作为表单输入。在我的模型中,我使用json.loads()和json.dumps()将列表转换为表单输入的文本。因此,当ModelForm将一个表单作为输入并尝试保存它时,它期望一个字符串,而不是一个原始列表。