Skip to main content
 首页 » 编程设计

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

2024年10月24日36dyllove98

我正在尝试创建一个表单,用户可以在其中填写语言、描述和语言级别(中级、高级...)。

语言模型:

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_price、second_level_price、third_level_price)。

现在,我希望用户填写表格。其中一种形式应该是级别。用户只需选择“基本”、“中级”或“高级”。根据这个选择,就会有计算价格。

因此,如果用户选择了“Basic”,则会根据语言的first_level_price 来定价。

我试过很多方法,但没有一个奏效。

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

请您参考如下方法:

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

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 成员(member)时,您现在可以从 first_level_price 字段获取价格。