2010-03-26 2 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. Вы уверены, что хотите установить значение «Вверх»? это отображаемое значение, вам может быть интересно установить значение -1 или 1

  2. Вы можете легко проверить, есть ли выбор в списке, путем преобразования списка выбора в dict, например.

    my_choice in dict(VOTE_TYPE)

  3. Если возможно вы можете использовать choiceField или TypedChoiceField, они будут утверждать, что данное значение существует в списке выбора.

+0

1. «Вверх» - это читаемое значение 1, которое будет введено в db. 2. Это именно тот ответ, который я искал. Отлично работает 3. Я также рассмотрю этот вопрос 4. Спасибо. –

2

Прежде всего, models.SmallIntegerField не может иметь опцию max_length. Это используется только в CharField и его производных. Во-вторых, согласно documentation, опция choices используется главным образом Django для сайта Admin. Тем не менее, один вариант у вас есть, чтобы импортировать VOTE_TYPE кортеж из вас models.py файла в файл 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 hin SmallIntegerField. –

Смежные вопросы