Select 下拉菜单中的特定选项 DJANGO

Select specific option from dropdown menu DJANGO

我有一个页面,其中列出了来自 table 个名为 Stocks 的所有项目,每一行都有一个可点击的 ORDER 按钮,可以将用户引导到另一个页面,他们可以在其中输入所有详细信息以及 select 他们想买什么商品和多少钱,然后将所有这些数据保存到一个 table 命名的订单中。

此订单 table 与股票 table 链接如下:

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)

根据他们点击订购按钮的项目,我想自动 select 下一页下拉菜单中的相应项目,这样他们就不必这样做了。

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']

使用Stock对象作为初始值,所以不是queryset.item_name,而是queryset(虽然因为它不是查询集,最好将其重命名为stock):

from django.shortcuts import get_object_or_404

def create_order(request, pk):
    <strong>stock</strong> = get_object_or_404(Stock, id=pk)
    if request.method == 'POST':
        form = CreateOrderForm(request.POST, initial={<strong>'order_item': stock</strong>})
        if form.is_valid():
            form.save()
    else:
        form = CreateOrderForm(initial={<strong>'order_item': stock</strong>})
    context = {
        'form':form
    }
    return render(request, 'add_items.html', context)

Note: It is often better to use get_object_or_404(…) [Django-doc], then to use .get(…) [Django-doc] directly. In case the object does not exists, for example because the user altered the URL themselves, the get_object_or_404(…) will result in returning a HTTP 404 Not Found response, whereas using .get(…) will result in a HTTP 500 Server Error.