обновить форму — с использованием наборов форм — начальные значения неизвестны до времени выполнения

#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