【问题标题】:Django - how to not loose verbose_name and other attributes of Field when overriding its form in ModelForm?Django - 在 ModelForm 中覆盖其表单时如何不丢失字段的 verbose_name 和其他属性?
【发布时间】:2013-05-24 16:51:50
【问题描述】:

给定:

#models.py
from django.db import models


class MyModel(models.Model):
    myfield = models.IntegerField('Detailed description')

#forms.py
from django import forms
from models import MyModel

class MyModelForm(forms.ModelForm):
    myfield = forms.IntegerField()


class Meta:
    model = MyModel

使用此设置 - 管理页面上不会显示详细名称,而是字段名称(首字母大写)。如果从 MyModelForm 中删除覆盖字段 - 详细名称将照常显示。如果提供带有描述的字符串作为参数label,forms.IntegerField() - 它将显示在管理页面上。
我正在寻找pythonic方式来显示模型类中定义的verbose_name,以防万一在ModelForm中覆盖此字段表单,而不使用label提示。

有什么想法吗?

【问题讨论】:

  • 据我所知,没有直接的方法可以做到这一点 - 如果您在表单声明中手动指定一个字段,则必须设置它的所有内容。当您只想稍微更改默认字段的行为时,一种常见的解决方法是使用表单的 __init__ 方法来编辑字段属性。

标签: python django


【解决方案1】:

您可以像这样访问模型的详细名称:

myfield = models.IntegerField(label=MyModel._meta.get_field_by_name('myfield')[0].verbose_name)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多