2011-03-03 28 views
2

我有一個表單選擇框,其值與對象相對應。用戶選擇輸入並提交表單。然後我想獲取該值並檢索具有與所選表單值等效的ID的對象。然而,當我嘗試這樣做,我得到一個錯誤,像這樣:Python/Django - 表單選擇值是對象ID ...無法獲取對象

int()函數的參數必須是字符串或數字,而不是「汽車」

例子:

if form.is_valid(): 
    car = Car.objects.get(id=form.cleaned_data['id']) 

我猜測問題是返回的值是一個字符串,而不是一個整數。在PHP中,這是簡單的。如何強制轉換或使用返回的表單值來獲取關聯的對象?

好像Django的沒有返回表單元素的值,而是對用戶可見的選項名稱...

Form類:

class CarForm(forms.ModelForm): 
    class Meta: 
     model = Car 

HTML表單:

<form action=""> 
    <select name="id"> 
     {% for car in cars %} 
      <option value="{{car.id}}">{{car.title}}</option> 
     {% endfor %} 
    </select> 
</form> 
+0

你有沒有想過一個乾淨的解決方案呢?我認爲我有同樣的問題,但只能找到我下面發佈的一個可疑解決方案。 – KobeJohn 2011-10-30 15:07:28

回答

1

id字段必須是整數或可以轉換爲整數的字符串。 就這麼簡單!

不知何故,你form.cleaned_data['id']返回一個叫做Cars

確保,如果你想將它傳遞到get(id=

+0

啊。將值打印到我的控制檯後,我可以看到選擇字段的文本正在作爲值傳遞...因此,在以下示例中,form.cleaned_data ['id']將是NAME:。我如何獲得價值? – GregL83 2011-03-03 19:03:11

+0

我可以請看看您的模板和表單代碼嗎? PS:價值被放在' {%endfor%} form:class CarForm (forms.ModelForm):TYPES = [['radio1','Choice1'],['radio2','Choice2']] link_type = forms.ChoiceField(choices = TYPES,required = False,widget = forms.RadioSelect(attrs = {'class':'related-resource-type'}))class Meta:model = Car表單元素在html中,並添加到表單標籤內......也許這就是問題所在?這些表單元素必須在表單類中定義? – GregL83 2011-03-03 19:39:12

0

您可以使用,而不是生成使用HTML選擇

ModelChoiceField它返回一個數字模型在forms.py中:

class CarSelectForm(forms.Form): 
    car = forms.ModelChoiceField(queryset=Car.objects.all(), empty_label=None) 

in view.py:

if form.is_valid(): 
    car = form.cleaned_data['car'] 
0

這可能是一個壞的,但我認爲工作的答案。如果有人有一個真正的解決方案,請張貼,因爲我仍然需要它。

(我使用modelformset,而只是一個可能的ModelForm工作相同)

對我來說,{{form.id}}工作在頁面上(放ID)和回來正確POST數據。然而,它沿着這條線的某處被轉換(如Yuji在他的帖子中所述)到由該id表示的模型對象中,這就是clean_data中的內容。

總之,改變

car = Car.objects.get(id=form.cleaned_data['id']) 

car = form.cleaned_data['id'] 

我認爲它只是看起來像只是因爲當您打印或調試,它使用您的海峽或Unicode表示的字符串。

重複:這幾乎可以肯定是一種副作用或壞事情。如果我找出更好的方法,我會發布它。

+0

看到相同的問題。 – 2012-08-12 19:45:23