2011-06-21 10 views
7

Następujące pojawia się zamiast pola w moim szablonie.django localflavors US

<django.contrib.localflavor.us.forms.USStateSelect object at 0x92b136c> 

mój szablon ma

{{ form.state }} 

co problem może być?

class RegistrationForm(forms.Form): 

    first_name = forms.CharField(max_length=20) 
    last_name = forms.CharField(max_length=20) 
    phone = USPhoneNumberField() 
    address1 = forms.CharField(max_length=45) 
    address2 = forms.CharField(max_length=45) 
    city = forms.CharField(max_length=50) 
    state = USStateSelect() 
    zip = USZipCodeField() 

czy jest i tak, czy mogę ustawić stan i zip jako opcjonalny?

+0

Czy możesz opublikować kod dla swojej klasy formularza? –

+0

view eidts thanks – Eva611

Odpowiedz

9

Aby ograniczyć opcje do listy rozwijanej, należy użyć modelu us.us_states.STATE_CHOICES w swoim modelu i użyć us.forms.USStateField() zamiast us.forms.USStateSelect() w swoich formularzach.

Aby pole opcjonalne w formularzu, należy dodać blank = True do tego pola w modelu.

from django.contrib.localflavor.us.us_states import STATE_CHOICES 
from django.contrib.localflavor.us.models import USStateField 

class ExampleLocation(models.Model): 
    address1 = models.CharField(max_length=45) #this is not optional in a form 
    address2 = models.CharField(max_length=45, blank = True) #this is made optional 
    state = USStateField(choices = STATE_CHOICES) 

Zamiast STATE_CHOICES, istnieje kilka opcji można znaleźć in the localflavor documentation. STATE_CHOICES jest najbardziej wszechstronnym, ale może nie być tym, czego pragniesz. Jeśli potrzebujesz tylko 50 stanów plus DC, użyj US_STATES. Ta odpowiedź zakłada, że ​​używasz ModelForms. Jeśli nie jesteś, powinieneś. Po wprowadzeniu modelu, należy postępować suche i tworzyć podstawowe formy tak:

from django.forms import ModelForm 

class ExampleForm(ModelForm): 
    class Meta: 
     model = ExampleLocation 

A dziedziczy swoje pola od modelu. Możesz dostosować dostępne pola, jeśli nie chcesz, aby cały model był dostępny z innymi opcjami class Meta, takimi jak fields lub exclude. Formy modeli są tak samo konfigurowalne, jak każda inna forma, po prostu zaczynają się od założenia pól modelu.

+0

to powoduje błąd podczas ustawiania opcji USStateField jako opcji – Eva611

+0

Czy opcja USStateField jest opcjonalna w modelu * lub * formularza *? Jeśli jest to tylko w formie i nie jest powiązane z modelem, użyj w formularzu 'required = False' zamiast' blank = True'. Pamiętaj, że jeśli nie masz w modelu "pustego = Prawda", a spróbujesz dodać nowy wpis bez tego pola, otrzymasz błąd. –

+1

Dlaczego nazywa się USStateSelect, jeśli nie wyświetla zrzutu wyboru opcji w USA? Czy może czegoś brakuje? – Chris

Powiązane problemy