2009-12-02 97 views
9

我在我的車型之一使用USStateField()從Django的localflavor:有什麼辦法可以讓Django的USStateField()沒有預選的值嗎?

class MyClass(models.Model): 
    state = USStateField(blank=True) 

然後我從該類做了一個表格:

class MyClassForm(forms.ModelForm): 
    class Meta: 
     model = MyClass 

當我展示形式,外地「國家」是預先選擇的「Alabama」 的下拉框。

有什麼辦法讓下拉框不顯示預選的 的值嗎?

回答

9

這似乎是一個已知的問題(雖然我不知道票的 - 我會仔細檢查有沒有爲它一票,如果沒有,file it):

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

class YourModelForm(forms.ModelForm): 
    class Meta: 
     ... 

    YOUR_STATE_CHOICES = list(STATE_CHOICES) 
    YOUR_STATE_CHOICES.insert(0, ('', '---------')) 
    state = USStateField(widget=forms.Select(
      choices=YOUR_STATE_CHOICES)) 

以上代碼從here

+0

謝謝你,這就是我正在尋找的東西。 – MegaBytes 2015-03-10 07:07:05

3

我不太喜歡將-----手動插入列表的想法。當該字段設置爲空白= True時,空白選項應自動顯示在選取列表的頂部。另外,如果你的狀態字段在配置文件中,並且你正在使用django-profiles,那麼你最終需要修改一個可重用的應用程序。

我覺得更容易和更清潔的,只是從文件的contrib複製STATE_CHOICES元組/ localflavor /美國/ us_states.py到我的項目中constants.py,然後在models.py:

import constants 
state = models.CharField(blank=True, max_length=2, choices=constants.STATE_CHOICES) 

然後,blank = True選項可以按預期工作,而無需monkeatch清單。

1

下面的技巧也似乎在這兩個Django管理和形式在視圖中定義的工作:

from django.contrib.localflavor.us.us_states import STATE_CHOICES 
USStateField.choices = STATE_CHOICES 

這裏的事情是,在contrib請/ localflavor /美國/ forms.py的forms.py定義有USStateSelect小部件將選項定義爲STATE_CHOICES。但是,contrib/localflavor/us/models.py中的模型沒有定義這些選擇。這樣,空白=該字段的真設置不會導致在選擇中正確的空白第一項,我發現看着db/models/fields/init .py。

另一種解決方法是改變了contrib/localflavor /美國/ models.py添加一個構造函數是這樣的:

class USStateField(Field): 
    def __init__(self, *args, **kwargs): 
     from us_states import STATE_CHOICES 
     kwargs.setdefault('max_length', 2) 
     kwargs.setdefault('choices', STATE_CHOICES) 
     super(USStateField, self).__init__(*args, **kwargs) 
    # etc. etc. 
+0

參見http://code.djangoproject.com/ticket/10969 – 2010-03-09 16:23:25

3

只是報告,這是固定的!還要注意的是localflavornow a third-party package和安裝後(例如pip install django-localflavor)可以這樣使用:

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


class MyClass(models.Model): 
    state = USStateField(choices=STATE_CHOICES) 
2

一個簡單的辦法:

from localflavor.us.us_states import STATE_CHOICES 


STATE_CHOICES = (('', '---------'),) + STATE_CHOICES 
相關問題