django positiveinteger默认值为空

django positiveinteger默认值为空,django,django-models,default,Django,Django Models,Default,我有一个带有选择列表/正整数字段的models类 class AchievementDetails(models.Model, FillableModelWithLanguageVersion): ACADEMIC_ACHIEVEMENT = 1 COMMERCIAL_ACHIEVEMENT = 2 PERSONAL_ACHIEVEMENT = 3 PROFESSIONAL_ACHIEVEMENT = 4 SPORTING_ACHIEVEMENT = 5

我有一个带有选择列表/正整数字段的models类

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>
---------
已指示我不要将选择类型=''纳入成就类型

我用于客户端验证,因此选项值必须为空值

我有两个问题:

1。如何用“选择成就类型”替换默认文本“-----------”


2。当表单位于编辑模板中时,如何删除默认选项值?

我使用以下方法实现了这一点:

validators=[MinValueValidator(1)]
我就是这样使用它的:

将导入包括在models.py文件中:

from django.core.validators import MinValueValidator
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文件中:

from django.core.validators import MinValueValidator
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文件中包含字段,包括选项default和MinValueValidator:

 ....
 achievement_type = models.PositiveIntegerField(choices=ACHIEVEMENT_TYPES, default=SELECT_ACHIEVEMENT_TYPE, validators=[MinValueValidator(1)])
 ....
在forms.py文件中,包括错误消息元数据以覆盖错误消息(对于Django 1.5+):