使用布局对象AppendedText更改django-crispy-forms中仅一个字段的小部件

Gus*_*res 3 python django django-crispy-forms

我正在使用django-crispy-formsdjango中呈现模型的形式.django-crispy-forms已经与Twitter Bootstrap很好地集成,并为AppendedText小部件定义了一个布局对象:

AppendedText小部件

我的django中有以下型号 models.py

class Historia(models.Model):
    persona         = models.ForeignKey('Persona', 
                                  blank=False, 
                                  null=True,
                                  related_name='historias')
    fecha           = models.DateTimeField(unique=True, 
                                auto_now_add=True)
    motivo          = models.TextField()
    peso            = models.DecimalField(blank=True,
                                   max_digits=5, decimal_places=2)
    talla           = models.IntegerField(blank=True)
    tension         = models.CharField(max_length=15)
    pulso           = models.IntegerField()
    diagnostico     = models.TextField()
    tratamiento     = models.TextField()
    pendiente       = models.TextField(blank=True)
Run Code Online (Sandbox Code Playgroud)

我定义以下modelformforms.py:

class HistoriaForm(django.forms.ModelForm):
    class Meta:
        model = models.Historia

    def __init__(self, *args, **kwargs):
        super(HistoriaForm, self).__init__(*args, **kwargs)

        self.helper = FormHelper(self)
        self.helper.form_class = 'form-horizontal'
        self.helper.form_tag = True
        self.helper.form_id = 'nueva_historia_form'
        self.helper.form_action = 'nueva_historia'

        self.helper.form_show_errors = True
        self.helper.error_text_inline = False

        self.helper.add_input(Submit('crear', 'Crear'))
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在peso不必创建新widget子类的情况下更改字段的窗口小部件,因为django-crispy-forms已经定义了布局对象.另请注意,我不想枚举所有其他字段,以便执行此操作:

self.helper.layout = Layout(
            Fieldset(
                'Legend',
                'nombre',
                'apellido',
                AppendedText('peso', 'kg')
            ),
            ButtonHolder(
                Submit('submit', 'Submit', css_class='button white')
            )
        )
Run Code Online (Sandbox Code Playgroud)

因为如果我决定在我的模型中添加新的字段,标准小部件已经非常有用,我将不得不继续编辑帮助器布局.

编辑:我也看到了在帮助器中访问布局的方法,self.helper.layout[0] = AppendedText('peso', 'kg')但我不知道我想要更改的字段的索引,如果我可以写的话会更好self.helper.layout['peso'] = AppendedText('peso', 'kg')

mar*_*jop 6

django-crispy-forms确实有这些东西的API:http: //django-crispy-forms.readthedocs.org/en/latest/dynamic_layouts.html

你可以这样做:

form.helper['peso'].wrap(AppendedText, "kg")
Run Code Online (Sandbox Code Playgroud)

  • 对不起古斯塔沃,但你指出的是一个错误.您不必传递该字段的名称.与其他情况一样,当您包装多个字段时,无法为所有字段传递字段名称.这已在本次提交https://github.com/maraujop/django-crispy-forms/commit/c4bb6e6a6e15c984829f16494ac9fde399b2f9ca中得到解决,并将成为crispy-forms 1.2.5的一部分. (2认同)
  • 它仍然给我一个“您需要在 FormHelper 中设置布局”错误,但我不想这样做,因为我懒得引用布局中的每个字段。如果我添加更多字段,我还必须去更改它。 (2认同)