2017-10-10 53 views
0

我一直在挑选我的大脑,试图弄清楚这一点,所以现在我转向社区寻求帮助。在Django下拉表单中的随机选项

我正在使用模型在Django中创建窗体,并且我想为随机选项添加一些下拉选项。

这里是我工作的总体思路:

models.py

Character(models.Model): 
    name = models.CharField(max_length=255,unique=True) 
    age = models.PositiveIntegerField(default=0) 
    gender = models.CharField(max_length=20,choices=creation_choices.GENDERS) 
    race = models.CharField(max_length=500,choices=creation_choices.RACE) 

creation_choices.py

GENDERS = (
    ('male',"Male"), 
    ("female","Female"), 
    ("unknown","Unknown"), 
) 
RACE = (
    ('human','Human'), 
    ('elf','Elf'), 
    ('dwarf','Dwarf'), 
) 

我所试图做的是添加用户选择随机的方式,并返回其他值之一。我尝试了很多不同的方法,但大多数都返回了一个错误。当我用random.choice()创建一个函数,并通过它推动它似乎工作,但由于某种原因总是返回相同的值。

任何帮助将不胜感激!

+0

你应该尝试'choices'参数传递给FormField而不是ModelField,它更灵活,接受一个可调用的动态生成的选择。 –

+0

@KlausD。是对的。为相应表单字段的选项添加一个“随机”选项,并在表单的'clean_fieldname'方法中处理该额外选项。 – schwobaseggl

回答

0

添加(None,'Random')到选择集和有问题的模型字段声明 default=select_random_genderdefault=select_random_race以及blank=False, null=False

声明这些功能:

def select_random_gender(): 
    selection = random.choice(GENDERS)[0] 
    return selection if selection else select_random_gender() 

def select_random_race(): 
    selection = random.choice(RACE)[0] 
    return selection if selection else select_random_race()