我有一个关于在Django中使用curry函数的问题。我已成功使用它来构建带有自定义Form的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
我的问题是我不知道它是如何工作的 - 我找不到任何关于它的文档,而源代码并没有真正为我揭示它。任何人都可以解释这是如何工作的,并提供一些咖喱的好用例,除了这个?
答案 0 :(得分:1)
Pro Django书中有一个很好的例子,说明了咖喱是如何运作的。
简单地说,它允许您使用预定义的参数执行函数并将其另存为新函数,以便稍后仅使用所需的参数。所有这些没有运行该功能。
对于上述情况,curry是一个巨大的帮助,因为我们不需要实例化RelationForm只是为了传递person参数。