【发布时间】:2011-09-12 20:29:59
【问题描述】:
我正在编写自定义模型表单集。我需要按字段“排序”的值对表单进行排序。我在子表单集类中重载了 BaseFormSet 的 __iter__ 方法。
我的类继承自 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]
我在我的模型表单集中使用它:
OrderCatsFormSet = modelformset_factory(ParentCategory,
fields=('category', 'ordering'),
formset=SortedCatForms,
extra=0)
问题是:
渲染时捕获 TypeError:“NoneType”对象不可迭代
异常位置:
__iter__中的 ...forms.py,第 38 行
但在源 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__有问题吗?
【问题讨论】:
-
可能需要查看更多的回溯。
-
我在编辑我的问题时添加了完整的追溯。
-
一个陷阱已经完成,这很有价值。但是我仍然对此问题有疑问,并且无济于事。我的表单集返回空列表。非常感谢您关注这个问题!
标签: python django django-forms