4

我对 Django 中 curry 函数的使用有疑问。我已经成功地使用它来构建一个带有自定义表单的内联模型表单集,因此:

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

我的问题是我不知道它是如何工作的——我找不到任何关于它的文档,而且源代码并没有真正为我提供任何启示。谁能解释这是如何工作的,并给出咖喱的一些好的用例,除了这个吗?

4

1 回答 1

1

Pro Django book 中有一个很好的例子来说明咖喱是如何工作的。

简单地说,它允许您使用带有预定义参数的函数并将其保存为新函数,以便以后仅使用所需的参数。所有这一切都无需运行该功能。

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

于 2013-08-15T23:38:26.490 回答