Estoy escribiendo el modelformset personalizado. Necesito que las formas se ordenen por el valor del campo “ordenando”. Sobrecargué el método __iter__
de BaseFormSet en mi clase de formulario hijo.
class SortedCatForms(BaseFormSet): def __iter__(self): return iter(self.forms.sort( key=lambda form: form['ordering'].value())) #line 38, the problem line. def __getitem__(self, index): return list(self)[index]
OrderCatsFormSet = modelformset_factory(ParentCategory, fields=('category', 'ordering'), formset=SortedCatForms, extra=0)
Se detectó TypeError al renderizar: el objeto ‘NoneType’ no es iterable
- ¿Cómo puedo filtrar valores en un formulario de Django usando ModelForm?
- Django: Cómo llenar datos de formulario en plantilla
- Cómo editar los datos del modelo usando formularios Django.
- diseño de entrada de radio de forma django
- Agrupando fechas en Django
Ubicación de excepción: … forms.py en
__iter__
, línea 38
Pero en la fuente BaseFormSet:
def __iter__(self): """Yields the forms in the order they should be rendered""" return iter(self.forms)
¿Qué esta mal en mi codigo? ¿Cómo hacerlo de manera correcta?
Editar:
rastreo completo
Editar:
Después del consejo de @ bobince, mi código se convirtió en esto:
class SortedCatForms(BaseFormSet): def __iter__(self): return iter( sorted(self.forms, key=lambda form: form['ordering'].value())) def __getitem__(self, index): return list(self)[index]
Se devuelve lista vacía sin formularios. ¿Hay problema en __getitem__
?
No estoy lo suficientemente familiarizado con Django para juzgar si esta es la manera correcta , pero aquí hay una simple pregunta:
return iter(self.forms.sort( ...
sort()
es un método en una lista que lo ordena en el lugar y devuelve None
. Probablemente quiso decir:
return iter(sorted(self.forms, ...