我有一個頁面,其中列出了每一行名為 Stocks 的表中的所有專案有一個可點擊的 ORDER 按鈕,該按鈕將用戶引導到另一個頁面,他們可以在其中輸入所有詳細資訊,并選擇他們想要購買的專案和數量,然后將所有這些資料保存到名為 Orders 的表中。
此訂單表與 Stocks 表鏈接,如下所示:
class Order(models.Model):
name = models.CharField(max_length=50, blank=True, null=True)
quantity = models.IntegerField(default='0', blank=False, null=True)
order_item = models.ForeignKey(Stock, on_delete=models.CASCADE, blank=True)
address = models.CharField(max_length=50, blank=True, null=True)
city = models.CharField(max_length=50, blank=True, null=True)
根據他們單擊訂單按鈕的專案,我想從下一頁的下拉選單中自動選擇相應的專案,這樣他們就不必這樣做了。
def create_order(request, pk):
queryset = Stock.objects.get(id=pk)
form = CreateOrderForm(request.POST or None, initial={'order_item':queryset.item_name})
if form.is_valid():
form.save()
context = {
'form':form
}
return render(request, 'add_items.html', context)
我嘗試使用初始命令來執行此操作,但由于某種原因,它不會從默認的空白選項更改。
這是我的 forms.py 以防萬一
class CreateOrderForm(forms.ModelForm):
class Meta:
model = Order
fields = ['name','quantity','order_item','address','city']
uj5u.com熱心網友回復:
使用Stock物件作為初始值,所以 not queryset.item_name,但是queryset(雖然它不是一個查詢集,最好將它重命名為stock):
from django.shortcuts import get_object_or_404
def create_order(request, pk):
stock = get_object_or_404(Stock, id=pk)
if request.method == 'POST':
form = CreateOrderForm(request.POST, initial={'order_item': stock})
if form.is_valid():
form.save()
else:
form = CreateOrderForm(initial={'order_item': stock})
context = {
'form':form
}
return render(request, 'add_items.html', context)
注意:通常最好使用
get_object_or_404(…)[Django-doc],然后直接使用.get(…)[Django-doc]。如果物件不存在,例如因為用戶自己更改了 URL,get_object_or_404(…)則將導致回傳HTTP 404 Not Found回應,而 using.get(…)將導致HTTP 500 Server Error。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/430513.html
下一篇:如何將值插入表列?[復制]
