2010-03-26 60 views
1

我試圖檢查是否在選擇存在的值元組的模型字段設置。檢查的Django模型字段選擇存在

例如可以說我有這樣的型號:

class Vote(models.Model): 
VOTE_TYPE = (
    (1, "Up"), 
    (-1, "Down"), 
) 

value = models.SmallIntegerField(max_length=1, choices=VOTE_TYPES) 

現在,讓我們在一個視圖中說,我有一個變量new_value = 'Up',我想在一個新的投票作爲值字段中使用。我該如何首先檢查該變量的值是否存在於VOTE_TYPE元組中?謝謝。

回答

9
  1. 您確定要設置值爲「Up」嗎?這是一個顯示值,你可能有興趣在設定值-1或1

  2. 可以輕鬆地檢查是否選擇在列表中選擇轉換列表,例如字典

    my_choice in dict(VOTE_TYPE)

  3. 如果可能的話,你可以使用choiceField或TypedChoiceField,他們將驗證給定值的選擇列表存在。

+0

1.「向上」是1的可讀值,它將被輸入到db中。 2.這正是我正在尋找的答案。完美工作 3.我也來看看這個 謝謝你。 – 2010-03-26 17:22:07

2

首先,models.SmallIntegerField不能有max_length選項。這僅用於CharField及其衍生產品。其次,根據documentation,則choices選項主要是爲管理網站使用Django的。你有這就是說,一個選擇是從你models.py文件導入VOTE_TYPE元組到您的views.py文件,然後檢查值 - 是這樣的:

models.py 
... 
VOTE_TYPE = ((1, "Up"), (-1, "Down"),) 

views.py 
... 
from app.models import VOTE_TYPE 
for k,v in VOTE_TYPE: 
    if v == new_value: 
     return True 

另外,如果我沒記錯的話,你可以創建一個ModelForm然後將值傳遞給表單,該表單應該根據VOTE_TYPE元組驗證數據。

+0

這樣也工作了,雖然在幾行。感謝關於max_lengt的提示,請參閱SmallIntegerField。 – 2010-03-26 17:24:04