ListField没有保存在Django ModelForm中

时间:2014-05-11 17:04:54

标签: python django django-models django-forms listfield

我在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',...]。

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

2 个答案:

答案 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将一个表单作为输入并尝试保存它时,它期望一个字符串,而不是一个原始列表。