/ / Ako zobraziť údaje obsiahnuté v modeloch Django vo formulári ponuky Django Dropdown? - django, python-3.x.

Ako zobrazovať údaje obsiahnuté v modeloch Django v ponuke rozbaľovacieho menu Django? - django, python-3.x

V súčasnosti mám nejaké dáta uložené v modeli Django s nasledujúcou štruktúrou:

#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

Chcem zobraziť všetkých zákazníkov, ktorí sú uložené v Zákazníckom modeli vo formulári DropDown. To, čo som sa snažil, bolo nasledovné, ale ja som nemal úspech:

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

Ďalšou možnosťou bez úspechu bolo:

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

Táto posledná možnosť nenájde list_of_customers, ako keby premenná nebola deklarovaná. Ako môžem zobraziť údaje uložené v modeloch Django vo formátoch Django?

odpovede:

3 pre odpoveď č. 1

Budete to musieť napísať inak. Ak chcete získať všetky mená zákazníkov, musíte ich definovať vo svojej vlastnej funkcii. Týmto spôsobom môžete generovať voľby.

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 pre odpoveď č. 2

môžeš použiť forms.ModelChoiceField je omnoho lepšie ako:

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

Viac informácií