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

标签 django django-forms

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

相关文章:

javascript - 无法将 jquery/ajax 集成到 django 项目中

javascript - Django 中没有提交按钮的表单

python - 如何根据 Graphene/Django 上的用户类型限制模型的字段访问?

django - Django 表单模型中的日期时间字段

python - 如何检查字符串是否包含多个正则表达式并捕获匹配的部分?

python - Django 模型表单设置 POST 但不保存

python - Django - 表单文件字段错误 "This field is required"

javascript - Django 表单操作参数中 PK 的替代方案

python - Django View 使用外键连接模型

python - 没有模型形式的django模型实例