【问题标题】:Django ModelForm: adding an alias to a fieldDjango ModelForm:为字段添加别名
【发布时间】:2011-01-05 10:28:51
【问题描述】:

我有一个 (GoogleAppEngine) Django ModelForm:

class A(db.Model):
  a = db.StringProperty()

class MyAForm(djangoforms.ModelForm):
  class Meta:
    model = A

这将创建一个具有一个字符串字段a 的表单。在我的表格中,我想将其称为其他名称,例如 b。所以我想要一个带有名为b 的字段的表单,当表单发布时,我们创建一个新的A 实体,其中a 属性填充b-值。

有没有一种巧妙的方法来做这个管道?

(ps.我不想改变底层模型)

【问题讨论】:

    标签: python django google-app-engine django-forms


    【解决方案1】:

    当您说要“调用”表单上的其他字段时,不清楚您的意思。你是说标签吗?这很容易做到:

    class MyAForm(djangoforms.ModelForm):
      a = forms.CharField(label='b')
      class Meta:
        model = A
    

    如果你想改变底层的 HTML ID,你可以通过小部件来做到这一点:

      a = forms.CharField(widget=forms.TextInput(attrs={'id':'b'}))
    

    我认为不可能更改实际字段的 HTML 名称,但我想不出您想要这样做的任何原因。

    【讨论】:

    • 我希望能够做到以下几点(假设我已经设置了正确的视图):curl -d"b=my_b_string" http://domain.com/api/A 这会创建一个新的 A(a='my_b_string')。
    • 如果您在同一页面上有两个表单,它们都包含名称字段。这是我遇到的场景,我想为其中一个设置别名,因此 request.POST 在传递到表单时将检索正确的变量。
    • @Richard:这就是表单前缀的用途:docs.djangoproject.com/en/1.1/ref/forms/api/#prefixes-for-forms
    【解决方案2】:
    class A(db.Model):
        a=db.StringProperty(verbose_name='b')
    

    【讨论】:

    • "(p.s. 我不想改变底层模型)"
    【解决方案3】:

    另一种方式应该是重新定义字段的标签:

    class MyAForm(forms.ModelForm):
    
        class Meta:
            model = A
    
        def __init__(self, *args, **kwargs):
            super(MyAForm, self).__init__(*args, **kwargs)
            self.fields['a'].label = 'something'
    

    【讨论】:

      猜你喜欢
      • 2012-01-26
      • 2023-03-09
      • 2015-06-25
      • 2018-03-14
      • 2015-09-06
      • 2016-04-09
      • 2011-08-08
      • 1970-01-01
      • 2015-08-26
      相关资源
      最近更新 更多