2010-03-30 54 views
1

我試圖讓具有鮮明的名單到forms.py這樣的查詢集鮮明:的Django在forms.py

forms.ModelMultipleChoiceField(查詢集= Events.objects.values(「主機」),所需= False).distinct()

在python shell中,這個命令的工作原理是完美的,但是當在forms.py中嘗試它時,會留下一個空白表單,所以什麼都不顯示。當我只是做Events.objects.all()表單出現,但明顯不與Events.objects.all()...我也嘗試values_list等,但似乎並不適合形式都.. 。任何人有一個想法如何獲得一個SELECT DISTINCT到ModelMultipleChoiceField中?

我在stackoverflow上看了一些其他的問題,但似乎沒有任何解決方法,所以希望有人知道如何在forms.py中做到這一點。

Thxs預先

回答

0

對於ModelMultipleChoiceField,Django的期望一個模型對象 - 因爲它存儲所選擇的項目的主鍵的值。換句話說,它意味着用於管理ManyToMany字段。

這聽起來像是你想存儲實際的字符串值,所以這可能不是你的正確選擇。您可能想要使用標準的MultipleChoiceField,並覆蓋表單的__init__方法來設置字段的choices屬性。請記住,任何選擇字段都是一組2元組,每個元素都包含db值和顯示值 - 即使您希望它們相同,也需要將值包括兩次:

def __init__(self, *args, **kwargs): 
    super(MyFormClass, self).__init__(*args, **kwargs) 
    self.fields['mychoicefield'].choices = [(x[0], x[0]) for x in 
           Event.objects.values_list('hostname').distinct()])