【发布时间】:2020-01-09 06:11:15
【问题描述】:
我正在设计一个表单,它使用 CheckboxSelectMultiple 让用户选择披萨的配料。 Topping 是它自己的类,只有一个“名称”属性。
class Pizza(models.Model):
menu = models.ForeignKey(Menu, on_delete=models.CASCADE, related_name="pizza")
style = models.ForeignKey(PizzaStyle, on_delete=models.CASCADE)
size = models.ForeignKey(Size, on_delete=models.CASCADE)
is_special = models.BooleanField(default=False)
num_toppings = models.IntegerField()
toppings = models.ManyToManyField(Topping, blank=True)
price = models.DecimalField(max_digits=5, default=0.00, decimal_places=2)
class PizzaForm(ModelForm):
class Meta:
model = Pizza
exclude = ['menu', 'price']
widgets = {
'toppings': CheckboxSelectMultiple,
}
labels = {
'num_toppings': 'Number of Toppings',
'is_special': 'Gluten Free Dough'
}
表单在 views.py 中创建良好,每个 Topping 都有正确的标签。但是,当我将表单数据传递到另一个页面(购物车)时,我只能传递表单中最后一个选中的复选框的编号。 (即如果选择了意大利辣香肠并且是列表中的第三个复选框,则 request.POST['toppings'] 返回 3。
我试图在 views.py 中为购物车做这样的事情,这样我就可以生成一个浇头列表:
toppings = ""
for topping in request.POST['toppings']:
print(topping.label)
toppings = ", ".join(topping)
我已尝试通过文档进行一些搜索,但似乎无法找出我的问题。谢谢!
【问题讨论】:
-
你有一个 str 函数在顶部返回 self.name