我不知道如何解决这个问题 - 我已经尝试了很多东西,但结果是在提交表单后我收到“太多值无法解包”错误。
这是正在运行的模型的简单演示:
class Supplier(models.Model):
name = models.CharField(max_length=100)
class SupplierLocation(models.Model):
supplier = models.ForeignKey(Supplier)
location = models.CharField(max_length=100)
class Product(models.Model):
supplier = models.ForeignKey(Supplier)
name = models.CharField(max_length=100)
price = models.DecimalField(decimal_places=2,max_digits=10)
我想要做的是生成一个有 2 多个单选按钮的表单。SupplierLocation.location 是标签,SupplierLocation.id 是单选按钮的值。同样,Product.name 将是标签,Product.id 将是单选按钮的值。这个想法是我想将它们分组到按 Supplier.id 排序的块中,以便 html 看起来像这样:
<div>
<table>
<tr class="{{ Supplier.name }} hidden">
<td>{{ location.name }}</td>
<td><input type="radio" name="location_id" value="{{ location.id }}" /></td>
</tr>
</table>
<table>
<tr class="{{ Supplier.name }} hidden">
<td>{{ product.name }}</td>
<td>{{ product.price }}</td>
<td><input type="radio" name="product_id" value="{{ product.id }}" /></td>
</tr>
</table>
</div>
显然,两个表中都会有多行,我很确定我应该能够使用小部件来代替硬编码的输入字段,但是我很困惑如何实现自定义表单。这个想法是,当页面加载时所有字段都被隐藏,当从页面上的链接中选择供应商时,这些字段在 JS 中可见。
我不确定表格应该是什么样子,以及我应该使用模型表格还是标准表格。在我当前的测试中,我有一个如下所示的表单:
表格.py
class ProductLocationForm(forms.Form):
PRODUCT_CHOICES = [(p.id, p.name) for p in Product.objects.all()]
LOCATION_CHOICES = [(l.id, l.name) for l in SupplierLocation.objects.all()]
product = forms.ChoiceField(widget=forms.RadioSelect, choices=PRODUCT_CHOICES)
location = forms.ChoiceField(widget=forms.RadioSelect, choices=LOCATION_CHOICES)
这给了我产品和位置,但缺少供应商分组或任何隔离供应商的方式,因此我可以使用 JS 隐藏/显示它们。
任何帮助都是极好的。