/ / Как да покажете данните, съдържащи се в Django моделите в падащото меню на Django? - django, python-3.x

Как да показваме данните, съдържащи се в Django модели, в Django Dropdown меню? - django, python-3.x

В момента имам данни, съхранени в 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

Искам да покажа всички клиенти, които са съхранени в модела на клиента в менюто на DropDown. Това, което опитах, беше следното, но нямам успех:

#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 формите?

Отговори:

3 за отговор № 1

Вие ще трябва да го напишете по различен начин. За да получите всички имена на клиенти, ще трябва да го дефинирате в неговата собствена функция. По този начин можете да генерирате избор по този начин.

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())])

1 за отговор № 2

можеш да използваш forms.ModelChoiceField е много по-добре като:

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

Повече информация