问题描述
|
我是python和Django的新手,并且对如何更新具有多个相同类型字段的f表单有一个简单的问题:我一直在尝试使用表单集来做到这一点:
我有一个简单的模型来存储类别:
class Category(BaseModel):
categoryText = db.StringProperty()
parentCat = db.IntegerProperty()
我想创建一个表单,在输入字段中显示所有可用类别,以便可以对其进行编辑:
使用表单集显示相同类型的多行:
编辑:
弄清楚了:
我必须创建一个词典项目列表
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)我的问题一直是将初始值传递给具有未知值的表单集,直到运行时。
3)我应该忘记表单集,而是通过使用init向表单添加字段来做到这一点吗?
4)在表单集中初始化表单字段的正确方法是什么?
上午
解决方法
initialStuff必须是字典列表,而不是字符串列表:
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