我正在编写自定义的modelformset。我需要按字段“排序”的值对表单进行排序。我在我的子formset类中重载了BaseFormSet的__iter__
方法。
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)
渲染时捕获TypeError:'NoneType'对象不可迭代
异常位置:...
__iter__
,第38行中的forms.py
但是在源BaseFormSet中:
def __iter__(self):
"""Yields the forms in the order they should be rendered"""
return iter(self.forms)
我的代码有什么问题?如何以正确的方式做到这一点?
编辑: 编辑:在@ bobince的建议之后我的代码变成了这个:
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]
它返回没有表单的空列表。问题是__getitem__
吗?
答案 0 :(得分:6)
不熟悉Django判断这是否是正确的方式,但这里有一个简单的问题:
return iter(self.forms.sort( ...
sort()
是列表上的一种方法,可以就地对其进行排序并返回None
。你可能意味着:
return iter(sorted(self.forms, ...