ボトルのサイズに基づいて、ビューで CharField の選択肢を設定しようとしています。選択肢は適切にレンダリングされますが、送信を押すと、選択が無効であるというエラーが表示されます。ビューから動的選択設定を削除し、models.py ファイルで設定したデフォルトを使用しただけでも、無効なエラーが発生します。ただし、選択肢をすべて削除すると、プログラムは任意の値を入力できるようになり、送信は問題なく行われます。私は何を間違っていますか?選択肢を正しく定義していませんか? models.py
class LiquorOrder(models.Model):
pack_size = (
('7', '7'),
('7', '7'),
)
LiquorOrderID = models.AutoField(primary_key=True)
storeliquorID = models.ForeignKey(StoreLiquor)
orderID = models.ForeignKey(Order)
OrderAmount = models.PositiveSmallIntegerField('Order Amount', max_length=3, choices=pack_size)
TotalPrice = models.DecimalField('Total Price', max_digits=5, decimal_places=2)
ビュー.py
def storeliquor(request, store_id, liquor_id):
LiquorID = Liquor.objects.get(id=liquor_id)
storeliquor = StoreLiquor.objects.get(liquorID=liquor_id)
store = Store.objects.get(StoreID=store_id)
ActvOrder = Order.objects.get(storeID=store, Active=True)
price = LiquorID.OffPremisePrice
btlsize = LiquorID.BottleSize
amount = request.POST.get('OrderAmount', '')
packD = LiquorID.PackSize
packX2 = packD*2
packX3 = packD*3
packX4 = packD*4
packX5 = packD*5
if btlsize == "1750 ML":
pack_size = (
('1', '1'),
('3', '3'),
(packD, packD),
(packX2, packX2),
(packX3, packX3),
(packX4, packX4),
(packX5, packX5),
)
elif btlsize == "1000 ML":
pack_size = (
('1', '1'),
('3', '3'),
('6', '6'),
(packD, packD),
(packX2, packX2),
(packX3, packX3),
(packX4, packX4),
(packX5, packX5),
)
elif btlsize == "750 ML":
pack_size = (
('1', '1'),
('3', '3'),
('6', '6'),
(packD, packD),
(packX2, packX2),
(packX3, packX3),
(packX4, packX4),
(packX5, packX5),
)
elif btlsize == "375 ML":
pack_size = (
('3', '3'),
('6', '6'),
('12', '12'),
(packD, packD),
(packX2, packX2),
(packX3, packX3),
(packX4, packX4),
(packX5, packX5),
)
elif btlsize == "200 ML":
pack_size = (
('12', '12'),
('24', '24'),
(packD, packD),
(packX2, packX2),
(packX3, packX3),
(packX4, packX4),
(packX5, packX5),
)
else:
pack_size = (
(packD, packD),
(packX2, packX2),
(packX3, packX3),
(packX4, packX4),
(packX5, packX5),
)
if request.method == "POST":
OrderForm = AddToOrderForm(request.POST)
if OrderForm.is_valid():
formfields = OrderForm.save(commit=False)
formfields.TotalPrice = (float(amount)) * (float(price))
formfields.storeliquorID = storeliquor
formfields.orderID = ActvOrder
formfields.OrderAmount = amount
formfields.save()
return HttpResponseRedirect('/stores/get/%s' % store_id)
else:
OrderForm = AddToOrderForm()
OrderForm.fields['OrderAmount'].choices = pack_size
args = {}
args['liquor'] = LiquorID
args['s'] = store
args['form'] = OrderForm
return render(request,'storeliquor.html', args)