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ď č. 1Budete 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)")