Django使用curry来构建具有自定义表单的表单集

时间:2013-08-05 17:12:38

标签: django django-forms

我有一个关于在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

我的问题是我不知道它是如何工作的 - 我找不到任何关于它的文档,而源代码并没有真正为我揭示它。任何人都可以解释这是如何工作的,并提供一些咖喱的好用例,除了这个?

1 个答案:

答案 0 :(得分:1)

Pro Django书中有一个很好的例子,说明了咖喱是如何运作的。

简单地说,它允许您使用预定义的参数执行函数并将其另存为新函数,以便稍后仅使用所需的参数。所有这些没有运行该功能。

对于上述情况,curry是一个巨大的帮助,因为我们不需要实例化RelationForm只是为了传递person参数。