2014-09-23 2 views
2

У меня есть класс моделей с полем выбора/положительного целого числа.django positiveinteger значение по умолчанию пустого

class AchievementDetails(models.Model, FillableModelWithLanguageVersion): 
    ACADEMIC_ACHIEVEMENT = 1 
    COMMERCIAL_ACHIEVEMENT = 2 
    PERSONAL_ACHIEVEMENT = 3 
    PROFESSIONAL_ACHIEVEMENT = 4 
    SPORTING_ACHIEVEMENT = 5 
    OTHER_ACHIEVEMENT_TYPE = 6 

ACHIEVEMENT_TYPES = (
    (ACADEMIC_ACHIEVEMENT, _('Academic Details')), 
    (COMMERCIAL_ACHIEVEMENT, _('Commercial Achievement')), 
    (PERSONAL_ACHIEVEMENT, _('Personal Achievement')), 
    (PROFESSIONAL_ACHIEVEMENT, _('Professional Achievement')), 
    (SPORTING_ACHIEVEMENT, _('Sporting Achievement')), 
    (OTHER_ACHIEVEMENT_TYPE, _('Other Achievement Type')), 
) 

.... 
achievement_type = models.PositiveIntegerField(choices=ACHIEVEMENT_TYPES) 
.... 

выше настройка добавляет в следующем выберите опцию списка в качестве опции по умолчанию:

<option value="">---------</option> 

Я не включу SELECT_TYPE = «» в ACHIEVEMENT_TYPES.

Я использую django-parsley для проверки на стороне клиента, поэтому значение параметра должно быть пустым значением.

У меня есть два вопроса:

1. Как заменить текст по умолчанию '---------' с 'Выбор типа' Достижение

2. Как удалить значение параметра по умолчанию, когда форма находится в шаблоне редактирования?

ответ

1

Я получил эту работу с помощью:

validators=[MinValueValidator(1)] 

Это, как я использовал его:

Включить импорт в файле models.py:

from django.core.validators import MinValueValidator 

включают в себя типы с нулевым значением, включенным в файл models.py:

SELECT_ACHIEVEMENT_TYPE = 0 
ACADEMIC_ACHIEVEMENT = 1 
COMMERCIAL_ACHIEVEMENT = 2 
PERSONAL_ACHIEVEMENT = 3 
PROFESSIONAL_ACHIEVEMENT = 4 
SPORTING_ACHIEVEMENT = 5 
OTHER_ACHIEVEMENT_TYPE = 6 
WRITE_MY_OWN_ACHIEVEMENT_TYPE_DESCRIPTION = 7777 # 7777 triggers a hidden text field to be displayed. 
DISPLAY_ONLY_ACHIEVEMENT_DESCRIPTION_WITH_PROMPT = 8888 
DISPLAY_ONLY_ACHIEVEMENT_DESCRIPTION_WITHOUT_PROMPT = 9999 

ACHIEVEMENT_TYPES = (
    (SELECT_ACHIEVEMENT_TYPE, _('Select Type')), 
    (ACADEMIC_ACHIEVEMENT, _('Academic Achievement')), 
    (COMMERCIAL_ACHIEVEMENT, _('Commercial Achievement')), 
    (PERSONAL_ACHIEVEMENT, _('Personal Achievement')), 
    (PROFESSIONAL_ACHIEVEMENT, _('Professional Achievement')), 
    (SPORTING_ACHIEVEMENT, _('Sporting Achievement')), 
    (OTHER_ACHIEVEMENT_TYPE, _('Other Achievement Type')), 
    (WRITE_MY_OWN_ACHIEVEMENT_TYPE_DESCRIPTION, _('Write my own Type description')), 
    (DISPLAY_ONLY_ACHIEVEMENT_DESCRIPTION_WITH_PROMPT, _('Display only Description with prompt')), 
    (DISPLAY_ONLY_ACHIEVEMENT_DESCRIPTION_WITHOUT_PROMPT, _('Display only Description without prompt')) 
) 

Включить поле в models.py файла с выбором, по умолчанию и MinValueValidator:

.... 
achievement_type = models.PositiveIntegerField(choices=ACHIEVEMENT_TYPES, default=SELECT_ACHIEVEMENT_TYPE, validators=[MinValueValidator(1)]) 
.... 

В forms.py файла, включает error_messages метаданные для переопределения сообщений об ошибке (для Django 1.5+) :

..... 
    error_messages = { 
     'achievement_type': {'validate_min': _('This field is required.')}, 
    } 
    .... 
Смежные вопросы