Проверьте, существует ли выбор поля модели Django - PullRequest
2 голосов
/ 26 марта 2010

Я пытаюсь проверить, существует ли значение в наборе выбора для поля модели.

Например, допустим, у меня есть такая модель:

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

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

Теперь допустим, что в представлении у меня есть переменная new_value = 'Up', которую я хотел бы использовать в качестве поля значения в новом голосовании. Как я могу сначала проверить, существует ли значение этой переменной в кортеже VOTE_TYPE? Спасибо.

Ответы [ 2 ]

12 голосов
/ 26 марта 2010
  1. Вы уверены, что хотите установить значение «Вверх»? это отображаемое значение, вам может быть интересно установить значение -1 или 1

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

    my_choice in dict(VOTE_TYPE)

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

2 голосов
/ 26 марта 2010

Во-первых, models.SmallIntegerField не может иметь опцию max_length. Используются только в CharField и его производных. Во-вторых, согласно документации , опция choices в основном используется Django для сайта администратора. Тем не менее, у вас есть возможность импортировать кортеж 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.

...