обновить форму - с помощью наборов форм - начальные значения неизвестны до времени выполнения - PullRequest
5 голосов
/ 30 мая 2011

Я новичок в 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 Ответ

1 голос
/ 05 января 2012

initialStuff должен быть списком диктовок, а не списком строк:

for cat in categories:    
  initialStuff.append( { categoryText: cat.categoryText,
  ...
     }
  )

Поэтому не удаляйте последнюю запятую.

Если вы используете операцию + = для списка и строки вы получите список строк (каждая строка имеет длину 1).

Пожалуйста, просмотрите следующее: http://docs.djangoproject.com/en/dev/topics/forms/formsets/#using-initial-data-with-a-formset

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...