2011-05-30 7 views
5

Soy nuevo en python y Django y tengo una pregunta simple sobre cómo actualizar el formulario f que tiene múltiples campos del mismo tipo: he estado tratando de hacer esto con formsets :formulario de actualización - using formsets - valores iniciales desconocidos hasta el tiempo de ejecución

que tienen un modelo simple para almacenar categorías:

class Category(BaseModel): 
    categoryText = db.StringProperty() 
    parentCat = db.IntegerProperty() 

Quiero crear una forma que muestre todas las categorías disponibles en los campos de entrada para que todos pudieran ser editados:

utilizando juegos de formularios de mostrar varias filas del mismo tipo:

EDIT:

descubierto:

tuve que crear una lista de elementos del diccionario

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}) 

Estoy teniendo un problema en esta poblar los datos iniciales. Cuando genero en un bucle que me da errores:

class CategoryForm(forms.Form): 
    categoryText = forms.CharField() 
    parentCat = forms.CharField() 
    catID = forms.CharField() 

Estoy asumiendo que necesito para almacenar el ID de los campos de actualizarlos!

Finalmente mi pregunta:

1) ¿Lo estoy haciendo bien o no es una forma más fácil de lograr esto?

2) mi problema ha sido pasar los valores iniciales a un formset con valores iniciales desconocidos hasta el tiempo de ejecución.

3) ¿Debería olvidarme de los conjuntos de formularios y hacer esto agregando campos al formulario con init?

4) ¿Cuál es la forma correcta de inicializar campos de formulario en un formset?

AM

+0

¿Hay alguna razón no estás usando un modelo de formulario aquí ?? –

+0

¿Por qué mezclar bases de datos sql y nosql? Como sé, StringProperty es para la base de datos * nosql *, pero * CharField * es para sql one. ¿Estas seguro que esto es correcto? – sergzach

+0

es formas.CharField, no modelos.CharField, S. –

Respuesta

Cuestiones relacionadas