【问题标题】:Accessing form variables in Meta, Django Floppyforms在 Meta,Django Floppyforms 中访问表单变量
【发布时间】:2015-01-15 19:25:03
【问题描述】:

我将 floppyforms 与 modelforms 一起使用,关于它们的唯一文档是通过 Meta 类指定小部件。但是,我希望我的 textarea 小部件占位符依赖于表单变量,而 Meta 无权访问类变量。关于在框架中实现这一点的任何提示?

现在我在 forms.py 中有这个:

class ChapterForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        self.placeholder = "Chapter " + (kwargs.pop('number'))
        super(ChapterForm,self).__init__(*args, **kwargs)
    class Meta:
        model = Chapter
        fields = ("name", "text", ...)
        widgets = {
            "name": PlaceholderInput(attrs={'placeholder':self.placeholder, 'class':'headline'}),
        }

我意识到我可以使用标准(非模型表单)表单并使用变量声明字段/小部件,但想知道是否有一种方法可以在不牺牲模型验证的情况下做到这一点。

【问题讨论】:

    标签: django django-forms django-floppyforms


    【解决方案1】:

    您可以通过字段的小部件定义这些属性

    from django.forms.widgets import TextInput
    
    def __init__(self, *args, **kwargs):
        self.placeholder = "Chapter %s" % kwargs.pop('number')
        super(ChapterForm,self).__init__(*args, **kwargs)
    
        self.fields['name'].widget = TextInput(attrs={
            'class': "headline",
            'placeholder': self.placeholder
        });
    

    【讨论】:

    • 这行得通。在我看来,这是一种比 Meta 更好的小部件定义方式。不知道为什么 floppyforms 文档不使用它。谢谢!
    • 如果使用 Meta,则不必重写 init 方法,但不能使用动态值。
    猜你喜欢
    • 2016-05-21
    • 2021-03-14
    • 2017-10-31
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2014-04-08
    相关资源
    最近更新 更多