この問題に対処する方法がわかりません。さまざまなことを試しましたが、フォームを送信した後、「解凍するには値が多すぎます」というエラーが発生します。
これは、使用中のモデルの簡単なデモです。
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はラジオボタンの値になります。アイデアは、htmlが次のようになるようにSupplier.idでソートされたブロックにそれらをグループ化することです。
<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で表示されるようになります。
フォームがどのように見えるか、モデルフォームと標準フォームのどちらを使用すべきかわかりません。私の現在のテストでは、次のようなフォームがあります。
forms.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でそれらを非表示/表示できます。
どんな助けでも素晴らしいでしょう。