我有一个关于在Django中使用curry函数的问题。我已经成功地使用它来构建一个带有自定义表单的 inlinemodelformset,因此:
person_obj, formed = Mother.objects.get_or_create(user=request.user)
FormSetClass = inlineformset_factory(Mother, Relation, form=RelationForm, extra=1)
FormSetClass.form = staticmethod(curry(RelationForm, person=person_obj))
这使我能够在表单 init 方法中将人传递给 kwargs,以过滤查询集:
class RelationForm(ModelForm):
def __init__(self, *args, **kwargs):
person = kwargs.pop('person')
qs = Relation.objects.filter(person=person)
self.fields['my-field'].queryset = qs
我的问题是我不知道这是如何工作的 - 我找不到任何关于它的文档,而且源代码并没有真正为我解释它。除了这个,谁能解释一下这是如何工作的,并为 curry 提供一些很好的用例?
最佳答案
在 Pro Django 书中有一个关于 curry 如何工作的很好的例子。
简单地说,它允许您使用带有预定义参数的函数并将其保存为一个新函数,以便以后仅使用需要的参数。所有这些 没有 运行函数。
对于上面的例子,curry 是一个巨大的帮助,因为我们不需要实例化 RelationForm 来传递 person 参数。
关于Django 使用 curry 构建具有自定义表单的表单集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18063820/