2011-07-18 18 views
1

我有以下的ModelForm,我得到我想要的結果,但我無法弄清楚如何從結果中刪除密鑰。我如何從這個ModelForm中刪除密鑰

形式:

class TicketActionsForm(ModelForm): 
assign = forms.ModelChoiceField(queryset=Users.objects.values('user').filter(account=3), empty_label=" Select Admin ") 

查看return語句:

return render_to_response('tickets/view.html', 
    {'ticket':ticket,'ticketactions':TicketActionsForm()}, 
    context_instance=RequestContext(request) 
) 

模板:

{{ ticketactions.assign }} 

結果:(截圖:http://snapplr.com/z7t7

<option value="" selected="selected"> Select Admin </option> 
<option value="{&#39;user&#39;: u&#39;Chris&#39;}">{&#39;user&#39;: u&#39;Chris&#39;} </option> 
<option value="{&#39;user&#39;: u&#39;mmiller&#39;}">{&#39;user&#39;: u&#39;mmiller&#39;}</option> 
<option value="{&#39;user&#39;: u&#39;millerm&#39;}">{&#39;user&#39;: u&#39;millerm&#39;}</option> 
<option value="{&#39;user&#39;: u&#39;Cindy222&#39;}">{&#39;user&#39;: u&#39;Cindy222&#39;}</option> 

編輯:

我能夠輕鬆更新標籤與以下覆蓋,但我仍然偶然發現如何更改選項值。我可以在POST'd後編輯數據,但在此之前我寧願清理它。

class UserModelChoiceField(forms.ModelChoiceField): 
def label_from_instance(self, obj): 
    return obj['user'] 

分辨率:

我結束了在初始化做一個小的黑客得到我想要的結果。

def __init__(self, *args, **kwargs): 
    super(TicketActionsForm, self).__init__(*args, **kwargs) 
    newChoices = [] 
    for item in self.fields['assign'].queryset: 
     choice=(item['user'],item['user']) 
     newChoices.append(choice) 
    self.fields['assign'].choices = newChoices 

回答

1

This answer有一個簡單的方法來改變ModelChoiceField中使用的標籤。

當您使用ModelChoiceField時,您可能需要撥打Users.objects.all()而不是。

你想做的事,然後什麼,將有以下代碼:

class UserModelChoiceField(ModelChoiceField): 
    def label_from_instance(self, obj): 
     return obj.get_full_name() 

,當你讓你的表格,你應該有下面的代碼:

class TicketActionsForm(ModelForm): 
    assign = forms.ModelChoiceField(queryset=Users.objects.all().filter(account=3), empty_label=" Select Admin ") 

這樣一個將行設置(更準確地說,一個QuerySet)傳遞給ModelChoiceField對象,並且它將有權訪問所有字段。使用上面的代碼,你可以控制的標籤,當你改變objects.values('user').filterobjects.all().filter,該<option>標籤的value屬性將成爲該行的id。然後,您可以使用來自request.POSTrequest.GET的傳入id,將其作爲您喜歡的任何其他字段通過運行查詢存儲在數據庫中。但是,在大多數情況下,您可能希望將其作爲id存儲在數據庫中。

+0

好的,所以在玩過一些遊戲後我只能得到標籤改變。我一直在尋找一個值覆蓋,但找不到任何東西。任何想法如何我可以做到這一點? – Chris

+0

我已經更新了我的答案。我沒有仔細閱讀你傳遞給queryset參數的代碼。 – Umang

+0

嗯,可以發誓,我想昨晚..現在的工作雖然。感謝您的幫助。 – Chris