2017-10-19 11 views
1

Actuellement, j'ai des données stockées dans un modèle Django avec la structure suivante:Comment afficher les données contenues dans les modèles Django dans un formulaire de menu Django Dropdown?

#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 

Je veux afficher tous les clients qui sont stockés dans le modèle client sous forme de menu déroulant. Ce que j'ai essayé AVAIT mais j'ai pas réussi:

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

Une autre possibilité sans succès a été:

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

Cette dernière possibilité ne trouve pas list_of_customers, comme si la variable n'a pas été déclaré. Comment puis-je afficher les données stockées dans les modèles Django dans les formulaires Django?

Répondre

3

Vous devez écrire différemment. Pour obtenir tous les noms des clients, vous devrez le définir dans sa propre fonction. De cette façon, vous pouvez générer les choix de cette façon.

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

vous pouvez utiliser forms.ModelChoiceField est beaucoup plus mieux comme:

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

More information