【问题标题】:ListField not saving in Django ModelFormListField 未保存在 Django ModelForm 中
【发布时间】:2014-05-11 17:04:54
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    我猜你需要交换这一行

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

    有了这个

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

    【讨论】:

    • 这不会改变任何东西。我认为可以使用任何一种方式。 (试过了,还是不行)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 2023-03-28
      • 1970-01-01
      • 2017-06-29
      • 2014-01-14
      • 2012-07-23
      相关资源
      最近更新 更多