2014-11-05 40 views
2

我试图做到以下几点:如何在django的模型中为DecimalField创建一个IntegerField?

class AmountInfoForm(forms.ModelForm): 

    amount = forms.IntegerField() 

    class Meta: 
     model = Customer 
     fields = ('amount',) 

对于我的模型领域:

class Customer(models.Model): 
    amount = models.DecimalField(max_digits=6, decimal_places=2, null=True) 

这是为了让显示在我的文字输入值是圆的,而不是显示小数。

问题是,小数位仍然显示。

它只接受例如60作为输入值。但是,当它显示该字段的表单实例时,它显示60.00 我在做什么错了?

+0

@madzohan你在说什么解决方案是? – Atma 2014-11-05 19:01:40

+0

忘了它,我是不留神)指定自定义的部件为这个领域,并在该部件覆盖渲染方法 – madzohan 2014-11-05 19:48:59

+0

@madzohan你知道一个例子或它在文档中的位置吗?从几次尝试看来,整数字段没有渲染方法。 – Atma 2014-11-05 21:42:07

回答

2

1) Django的字段没有被插件DJANGO,默认为窗口小部件和DecimalFieldIntegerFieldTextInput

而从this note您的声明将覆盖amount字段的默认行为。但是存储的数据在Decimal类型不int所以如果你想代表它在int你应该做的水木清华这样的:

int(Decimal()) 

或阅读Decimal docs和设置自定义舍入。

2)在这个步骤中,您需要不便指定您的自定义渲染,所以有变化,你如何能做到这一点的数量(在这一刻我还记得他们两个人):

2.1)简单的一个 - 覆盖的ModelForm INIT初始数据:如果您需要在花式小部件的定制表示你可以覆盖)

class AmountInfoForm(forms.ModelForm): 
    class Meta: 
     model = Customer 
     fields = ('amount',) 

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

     amount_initial = self.initial.get('amount') 
     if amount_initial: 
      self.initial['amount'] = int(amount_initial) 

2.2TextInputlook at the source),并指定我t in your class Metadocs

class YourCustomWidget(TextInput): 
    def render(self, name, value, attrs=None): 
     if value is None: 
      value = '' 
     final_attrs = self.build_attrs(attrs, type=self.input_type, name=name) 
     if value != '': 
      # Only add the 'value' attribute if a value is non-empty. 
      custom_value = int(value) 
      final_attrs['value'] = force_text(self._format_value(custom_value)) 

     # here you can customise output html 
     return format_html('<input{0} />', flatatt(final_attrs)) 

class AmountInfoForm(forms.ModelForm): 
    class Meta: 
     model = Customer 
     fields = ('amount',) 
     widgets = { 
      'amount': YourCustomWidget(), 
     } 
+0

这就是它!!!!! 2.1例子运行得很顺畅! – Atma 2014-11-06 15:09:50

相关问题