如何在Django中创建自定义选择字段?

时间:2016-01-04 19:46:03

标签: python django forms django-forms

我试图创建一个表单,用户填写语言,描述和语言级别(中级,高级...)。

语言模型:

class Language(models.Model):
    shortcut = models.CharField(max_length=6)
    name = models.CharField(max_length=50)
    first_level_price = models.FloatField() # Basic
    second_level_price = models.FloatField() # Intermediate
    third_level_price = models.FloatField() # Advanced

    def __str__(self):
        return self.shortcut+': '+self.name

对于每种语言,都有三个级别和价格(first_level_pricesecond_level_pricethird_level_price)。

现在,我希望用户填写表单。其中一种形式应该是水平。用户只需选择' Basic',' Intermediate'或者'高级'。根据这个选择,会计算价格。

因此,如果user已选择'基本',则会根据该语言的first_level_price定价。

我尝试了很多方法,但没有人工作。

level = forms.ChoiceInput(choices=('Basic','Intermediate','Advanced'))

2 个答案:

答案 0 :(得分:1)

选择应该是一对元组。对中的第一个值是您进入表单实例的数据,该对的第二个值是模板中显示的值:

level = forms.ChoiceField(choices=(('basic', 'Basic'), 
                                   ('intermediate', 'Intermediate'), 
                                   ('advanced', 'Advanced')))

查看choices的详细信息{/ 3}}。

答案 1 :(得分:1)

您可以像这样更新您的模型:

shaded.example.Foo

现在你可以使用这个模型创建一个class Language(models.Model): PRICE_CHOICES = ( ('first_level_price', 'Basic'), ('second_level_price', 'Intermediate'), ('third_level_price', 'Advanced'), ) first_level_price = models.FloatField() # Basic second_level_price = models.FloatField() # Intermediate third_level_price = models.FloatField() # Advanced shortcut = models.CharField(max_length=6) name = models.CharField(max_length=50) level = models.CharField(max_length=50, choices=PRICE_CHOICES) def __str__(self): return self.shortcut+': '+self.name ,它应该按照你期望的方式工作。

当用户选择ModelForm又名first_level_price会员资格时,您现在可以从Basic字段中获取价格。