Django Formset 中的自定义标签

Posted

技术标签:

【中文标题】Django Formset 中的自定义标签【英文标题】:Custom Label in Django Formset 【发布时间】:2011-08-22 10:13:15 【问题描述】:

如何将自定义标签添加到我的表单集?

<form method="post" action="">

     formset.management_form 
    % for form in formset %
        % for field in form %
             field.label_tag :  field 
        % endfor %
    % endfor %
</form>

我的模型是:

class Sing(models.Model):
song = models.CharField(max_length = 50)
band = models.CharField(max_length = 50)

现在在模板中而不是字段标签为'song',我如何设置它以使其显示为'What song are you going to sing?'

【问题讨论】:

“自定义标签”是什么意思?他们应该怎么看?它们应该显示在哪里?那个模板提取有什么意义? 抱歉不清楚。查看编辑? 【参考方案1】:

您可以在表单中使用label 参数:

class MySingForm(forms.Form):
    song = forms.CharField(label='What song are you going to sing?')
    ...

如果您使用的是ModelForms

class MySingForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(MySingForm, self).__init__(*args, **kwargs)
        self.fields['song'].label = 'What song are you going to sing?'
  
    class Meta:
        model = Sing

更新:

@Daniel Roseman 的评论

或者在模型中(使用verbose_name):

class Sing(models.Model):
    song = models.CharField(verbose_name='What song are you going to sing?',
                            max_length=50)
    ...

class Sing(models.Model):
    song = models.CharField('What song are you going to sing?', max_length=50)
    ...

【讨论】:

我收到TypeError: __init__() got an unexpected keyword argument 'label' label 应该是 verbose_name,或者只使用第一个位置参数。 答案已更新。 label 参数仅用于 Form 字段而不是 Model 字段(我的错误)。您能否发布您的表单定义,以便我可以为您提供 100% 可行的解决方案? 我使用的是 ModelForm class SingForm(ModelForm): Class Meta: model = Sing 在模型字段中使用verbose_name 的解决方案应该可以解决问题。

以上是关于Django Formset 中的自定义标签的主要内容,如果未能解决你的问题,请参考以下文章

Django的自定义标签

Django中的自定义过滤器

Django将多个参数传递给If语句中的自定义模板过滤器

如何在 django 的自定义过滤器中使用 % url % 来显示主题标签

自定义 Django 标签和 jQuery

是否可以使用 django 的自定义模板标签在模板的其他块中插入代码?