目前,我有一些数据存储在具有以下结构的 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)")
更多信息