我是python和Django的新手,并且有一个关于如何更新具有相同类型的多个字段的f表单的简单问题:我一直在尝试使用formsets:
我有一个存储类别的简单模型:
class Category(BaseModel):
categoryText = db.StringProperty()
parentCat = db.IntegerProperty()
我想创建一个表单,在输入字段中显示所有可用的类别,以便对它们进行全部编辑:
使用formsets显示相同类型的多行:
编辑:
想通了:
我必须创建一个字典项列表
categories = Category.objects.all()
initialStuff = []
oneFormV={}
for cat in categories:
oneFormV.clear()
oneFormV["categoryText"]=cat.categoryText
oneFormV["parentCat"]=str(cat.parentCat)
oneFormV["catID"]=str(cat.key().id())
initialStuff.append(oneFormV.copy())
def showCategories(request):
if request.POST:
# code to update db
else:
categories = Category.objects.all()
initialStuff = []
for cat in categories:
initialStuff += "'categoryText':u'" + cat.categoryText +"'," + "'parentCat':u'" + str(cat.parentCat) +"'," + "'catID':u'" + str(cat.key().id()) + "'"
initialStuff = initialStuff [:-1] # remove last comma
CategoryFormSet = formset_factory(CategoryForm,extra=categories.count())
formset = CategoryFormSet(initial= initialStuff )
return render_to_response('adminCategories.html', {'formset': formset})
我在填充初始数据时遇到问题。当我在循环中生成时,它会给我错误:
class CategoryForm(forms.Form):
categoryText = forms.CharField()
parentCat = forms.CharField()
catID = forms.CharField()
我假设我需要存储字段的ID来更新它们!
最后我的问题:
1)我这样做是对还是有更简单的方法来实现这个目标?
2)我的问题是将初始值传递给一个初始值未知的formset,直到运行时。
3)我应该忘记formset,并通过 init 在表单中添加字段来完成此操作吗?
4)在formset中初始化表单字段的正确方法是什么?
AM
答案 0 :(得分:1)
initialStuff必须是dicts列表,而不是字符串列表:
for cat in categories:
initialStuff.append( { categoryText: cat.categoryText,
...
}
)
所以,不要删除最后一个逗号。
如果你使用 + = 操作列表和str你得到一个字符串列表(每个str的长度为1)。
请查看下一个:http://docs.djangoproject.com/en/dev/topics/forms/formsets/#using-initial-data-with-a-formset