如何在 Django 下拉菜单窗体中显示 Django 模型中包含的数据



目前,我有一些数据存储在具有以下结构的 Django 模型中:

#Django model
from django.db import models
class Customer(models.Model):
    first_name = models.Charfield(max_length = 120, null = False, blank = False)
    last_name = models.Charfield(max_length = 120, null = False, blank = False)
    def __str__(self):
        return self.first_name+ " " + self.last_name

我想在下拉菜单窗体中显示存储在 客户 模型中的所有客户。我尝试了以下内容,但没有成功:

#Django form
from .models import Customer
# This throws as a result <Django.db.models.query.utils.deferred.attribute at 0x00013F> inside of the DropDown Menu form
class DropDownMenuCustomer(forms.Form):
    Customer = forms.ChoiceField(choices=[(x,x) for x in str(Customer.first_name)+str(" ")+ str(Customer.last_name))])

另一种没有成功的可能性是:

#Django form
from .models import Customer
class DropDownMenuCustomer(forms.Form):
    querySet = Customer.objects.all()
    list_of_customers = []
    for customer in querySet:
        list_of_customers.append(customer.first_name + " " + customer.last_name)
    customer= forms.ChoiceField(choices=[(x) for x in list_of_customers)])

这最后一种可能性找不到list_of_customers,就像变量没有被声明一样。如何在 Django 表单中显示存储在 Django 模型中的数据?

你必须以不同的方式编写它。要获取所有客户名称,您必须在其自己的函数中定义它。这样,您就可以以这种方式生成选择。

def customer_names():
    list_of_customers = []
    querySet = Customer.objects.all()
    for customer in querySet:
        list_of_customers.append(customer.first_name + " " + customer.last_name)
    return list_of_customers

class DropDownMenuCustomer(forms.Form):
    customer= forms.ChoiceField(choices=[(x) for x in customer_names())])

你可以使用forms.ModelChoiceField更好,比如:

customer = forms.ModelChoiceField(queryset=Customer.objects.all(), empty_label="(Nothing)")

更多信息

最新更新