modelformset __iter__ problema de sobrecarga

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.

Mi clase heredada de BaseFormSet:

 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] 

Lo uso en mi modelformset:

 OrderCatsFormSet = modelformset_factory(ParentCategory, fields=('category', 'ordering'), formset=SortedCatForms, extra=0) 

El problema es:

Se detectó TypeError al renderizar: el objeto ‘NoneType’ no es iterable

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, ...