将自定义数据添加到django模型字段

时间:2014-03-01 19:27:39

标签: django django-models django-forms

我想在模型字段中添加一些信息,以便在表单呈现时使用。我的真实模型有大约15个不同字段类型的值(添加和删除,因为我开发),它几乎完成了我需要的所有内容,所以我宁愿不为它们创建自定义模型字段。

我想做这样的事情:

from django.db import models

class MyModel(models.Model):  
    cost = models.DecimalField(max_digits=5, 
        decimal_places=2, 
        custom_info= {'glyph': 'glyphicon glyphicon-usd' }
    )

然后在我的表单模板中使用该字形,就像我使用verbose_name或help_text一样。

1 个答案:

答案 0 :(得分:1)

我学到的东西from a post just the other day。是否会在表单上定义自定义信息而不是模型工作?

formfield_callback上定义forms.ModelForm时,它会遍历表单字段,您可以对其进行操作。当您需要向窗口小部件添加css类并且不希望显式覆盖该字段时,这会派上用场。现在,您只需将formfield_callback = modify_form_field放在您希望forms.ModelForm显示的任何custom_info上。

from django.db import models

def add_glyphicons(model_field):
    form_field = model_field.formfield()

    if isinstance(model_field, models.IntegerField):
        form_field.custom_info = {'glyph': 'glyphicon glyphicon-usd'}
    elif isinstance(model_field, models.CharField):
        form_field.custom_info = {'glyph': 'glyphicon glyphicon-yen'}

    return form_field

class MyModel(models.Model):
    formfield_callback = add_glyphicons

    class Meta:
        model = MyModel

class MyOtherModel(models.Model):
    formfield_callback = add_glyphicons

    class Meta:
        model = MyOtherModel