Python 在下拉列表中显示django中的模型字段

Python 在下拉列表中显示django中的模型字段,python,html,django,django-forms,django-templates,Python,Html,Django,Django Forms,Django Templates,因此,我正在编写一个程序,用于为特定用户和项目创建订单。我的问题是,当我试图显示此型号的所有客户、产品和状态时: class Order(models.Model): STATUS = ( ('Pending', 'Pending'), ('Out for delivery', 'Out for delivery'), ('Delivered', 'Delivered'), ) customer = models.Forei

因此,我正在编写一个程序,用于为特定用户和项目创建订单。我的问题是,当我试图显示此型号的所有客户、产品和状态时:

class Order(models.Model):
    STATUS = (
        ('Pending', 'Pending'),
        ('Out for delivery', 'Out for delivery'),
        ('Delivered', 'Delivered'),
    )
    customer = models.ForeignKey(Customer, null=True, on_delete=models.SET_NULL)
    product = models.ForeignKey(Product, null=True, on_delete=models.SET_NULL)
    date_created = models.DateTimeField(auto_now_add=True, null=True)
    status = models.CharField(max_length=20, null=True, choices=STATUS)

    def __str__(self):
        return self.product.name
我必须手动执行此操作:

{% extends 'accounts/base.html' %}
{% load static %}
{% block main %}
    <form action="" method="post">
        {% csrf_token %}
        <div class="dropdown">
            <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                customer
            </button>
            <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
                <a class="dropdown-item" > {{ form.customer.1 }}</a>
                <a class="dropdown-item" > {{ form.customer.2}}</a>
                <a class="dropdown-item" > {{ form.customer.3}}</a>
                <a class="dropdown-item" > {{ form.customer.4}}</a>
                <a class="dropdown-item" > {{ form.customer.5}}</a>
            </div>
        </div>
        <input type="submit" name="submit" class="btn btn-success">
    </form>
{% endblock %}
Views.py

def createOrder(request):

    form = OrderForm # tworzymy obiekt który bedzie trzymał formę z plikuu forms.py

    if request.method == 'POST': # jeżeli meotda request-u to POST
        form = OrderForm(request.POST) # to zmieniami wartość obiektu na formę z requestem POST
        if form.is_valid(): # jeżeli forma jest prawidłowa
            form.save() # zapisz formę w bazie danych
            return redirect('/') # przekieruj na stronę główną

    return render(request, 'accounts/order_form.html', {
        'form': form, # przekazujemy formę do html-a aby mogła zostać wyświetlona
    })

你能把表格寄出去吗? 应该像使用Django ModelForm一样完成此操作

您甚至可以使用它过滤某些属性,如下面的示例所示:

class WarehouseForm(forms.ModelForm):
    forms.ModelChoiceField(required=False, widget=forms.Select, queryset=Item.objects.filter(name__in=['Test1', 'Test2']))

    class Meta:
        model = Warehouse
        fields = ['item', 'location']
因为我看到问题不在形式上,而是在实际使用它们

您应该将表单通过视图传递到模板中,如下所示:

def some_view(request, pk):
    order = Order.objects.get(id = pk)
    form = OrderForm(instance = order)
    return render(request, 'yourtemplate.html', {'form':form})
然后在html中,您甚至可以编写:

<form methodd="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <input type='submit' value="Submit">
</form>

{%csrf_令牌%}
{{form.as_p}}
如果要逐场渲染,可以使用: {{form.customer}}

如果你真的想做一个循环,那就去做吧

{% for customer in form.fields.customer.choices.queryset %}
    <a class="dropdown-item" > {{ customer }}</a>
{% endfor %}
{%用于form.fields.customer.choices.queryset%中的客户]
{{客户}}
{%endfor%}

它应该或多或少可以工作,但它可能会导致form.is\u无法按预期工作。

它被视图传递。我还把它添加到了问题中。一切都很好,可以显示,但我就是不能让它显示在for中,而不是写。1.2.3等等。我知道,但是表单看起来非常基本,没有办法设置样式。是的,但它应该显示在引导程序的下拉列表中,所以我必须访问form.customer的每个选项。我可以通过键入form.customer.1,然后是.2等等来实现,但它只适用于少数客户。所以我希望它像这样在form.customer中的i中循环,然后将i作为id form.customer.i传递,而不是form.customer.1,但是当我这样做时,它不想工作。
{% for customer in form.fields.customer.choices.queryset %}
    <a class="dropdown-item" > {{ customer }}</a>
{% endfor %}