我正在尝试在 Django 中创建一个验证表单,向用户提供一个选项列表,其中只有一个是有效的。
例如,对于喜欢披萨配料包括菠萝和羊乳干酪的用户来说——</p>
你最喜欢的披萨配料是什么?
- 火腿
- 菠萝
- 凤尾鱼
每次选择都应该是随机的,无论是顺序还是值,但总是有一个有效的答案。例如,如果用户刷新页面,表单可能是——</p>
你最喜欢的披萨配料是什么?
- 马苏里拉奶酪
- 火腿
- 羊乳干酪
我如何构建这样的表格?我被淹没了。我们必须在某处记录特定表单的有效选择是什么:
- 在数据库中为每个问题创建条目(不可扩展)?
- 在会话中设置它(hacky)?
- 基于用户 ID(可以预测)?
编辑——我们确实将披萨配料列表存储在数据库中——</p>
class UserProfile(Model):
favourite_pizza_toppings = ManyToManyField(PizzaTopping)
我想要的是这样的形式——</p>
class QuestionForm(Form):
questions = ChoiceField(choices=(('a', RANDOMLY_CHOSEN_OPTION_A),
('b', RANDOMLY_CHOSEN_OPTION_B),
('c', RANDOMLY_CHOSEN_OPTION_C)))
其中,每次实例化时,都是RANDOMLY_CHOSEN_OPTION
从 中随机选择的PizzaTopping.objects.all
,只有一个是PizzaTopping
也在 中UserProfile.favourite_pizza_toppings
。
当用户发布表单时,我们需要验证表单——这是棘手的一点。我们必须以某种方式记录每个实例化表单的有效选择(a
、b
或c
)。我们应该怎么做?