#django #forms
#django #формы
Вопрос:
Я новичок в 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()
Я предполагаю, что мне нужно сохранить идентификатор для полей, чтобы обновить их!
Наконец, мой вопрос:
1) Правильно ли я это делаю или есть более простой способ добиться этого?
2) моя проблема заключалась в передаче начальных значений в набор форм с начальными значениями, неизвестными до времени выполнения.
3) должен ли я забыть о наборах форм и сделать это, добавив поля в форму с помощью init?
4) каков правильный способ инициализации полей формы в наборе форм?
AM
Комментарии:
1. Есть ли причина, по которой вы не используете здесь форму модели??
2. Зачем смешивать базы данных sql и nosql? Насколько я знаю, StringProperty предназначен для базы данных nosql , но CharField предназначен для sql one. Вы уверены, что это правильно?
3. это формы. CharField, а не models. Чарфилд, С.
Ответ №1:
Начальный элемент должен быть списком dicts, а не списком строк:
for cat in categories:
initialStuff.append( { categoryText: cat.categoryText,
...
}
)
Итак, не удаляйте последнюю запятую.
Если вы используете операцию = для list и str, вы получаете список строк (каждая строка имеет длину 1).
Пожалуйста, просмотрите следующее:http://docs.djangoproject.com/en/dev/topics/forms/formsets/#using-initial-data-with-a-formset