相关疑难解决方法(0)

自定义/删除Django选择框空白选项

我正在使用Django 1.0.2.我写了一个由Model支持的ModelForm.此模型有一个ForeignKey,其中blank = False.当Django为此表单生成HTML时,它会创建一个选择框,其中包含ForeignKey引用的表中每一行的一个选项.它还在列表顶部创建一个没有值的选项,并显示为一系列破折号:

<option value="">---------</option>
Run Code Online (Sandbox Code Playgroud)

我想知道的是:

  1. 从选择框中删除此自动生成选项的最简洁方法是什么?
  2. 定制它的最简洁方法是什么,以便它显示为:

    <option value="">Select Item</option>
    
    Run Code Online (Sandbox Code Playgroud)

在寻找解决方案时,我遇到了Django票4653,这给我的印象是其他人有同样的问题,并且Django的默认行为可能已被修改.这张票超过一年,所以我希望可能有更清洁的方法来完成这些事情.

谢谢你的帮助,

杰夫

编辑:我已经配置了ForeignKey字段:

verb = models.ForeignKey(Verb, blank=False, default=get_default_verb)
Run Code Online (Sandbox Code Playgroud)

这确实设置了默认值,因此它不再是空/短划线选项,但不幸的是它似乎无法解决我的任何问题.也就是说,空/破折号选项仍然出现在列表中.

python django django-models django-forms

73
推荐指数
8
解决办法
5万
查看次数

Django - 无法从TypedChoiceField中删除empty_label

我的模型中有字段:

TYPES_CHOICES = (
    (0, _(u'Worker')),
    (1, _(u'Owner')),
)
worker_type = models.PositiveSmallIntegerField(max_length=2, choices=TYPES_CHOICES)
Run Code Online (Sandbox Code Playgroud)

当我在ModelForm中使用它时,它具有"---------"空值.它是TypedChoiceField所以它没有empty_label属性.所以我不能在表单init方法中覆盖它.

有没有办法删除"---------"?

该方法也不起作用:

def __init__(self, *args, **kwargs):
        super(JobOpinionForm, self).__init__(*args, **kwargs)
        if self.fields['worker_type'].choices[0][0] == '':
            del self.fields['worker_type'].choices[0]
Run Code Online (Sandbox Code Playgroud)

编辑:

我设法让它以这种方式工作:

def __init__(self, *args, **kwargs):
    super(JobOpinionForm, self).__init__(*args, **kwargs)
    if self.fields['worker_type'].choices[0][0] == '':
        worker_choices = self.fields['worker_type'].choices
        del worker_choices[0]
        self.fields['worker_type'].choices = worker_choices
Run Code Online (Sandbox Code Playgroud)

django django-forms

4
推荐指数
1
解决办法
1957
查看次数

标签 统计

django ×2

django-forms ×2

django-models ×1

python ×1