从RadioSelect中删除空白的“ ---------”

Ess*_*sex 3 python django

我没有找到一个方法来从我删除的第一行Choices_list所显示一样-------

我已经尝试了一些方法:blank=True,,Blank=False...,并且此行仍然存在。

这就是我在Django网站中得到的:

在此处输入图片说明

models.pyforms.py文件看起来像:

# models.py
# coding: utf-8

from django.db import models
from django.utils.encoding import force_text

FAVORITE_THEME = (
    ('Datasystems', 'Datasystems'),
    ('Cameroun', 'Cameroun'),
)

class Theme(models.Model):
    favorite_theme = models.CharField(max_length = 20, choices=FAVORITE_THEME, verbose_name="Sélectionner le thème")



# forms.py
#-*- coding: utf-8 -*-

from django import forms
from django.forms import ModelForm
from .models import Theme

class ThemeForm(forms.ModelForm):
    class Meta:
        model = Theme
        widgets = {'favorite_theme' : forms.RadioSelect,}
        fields=('favorite_theme',)
Run Code Online (Sandbox Code Playgroud)

您有删除或隐藏此行的想法吗?

谢谢

nar*_*ary 5

来自Django ModelForm docs

如果模型字段设置了选项,则表单字段的小部件将设置为选择,其中选项来自模型字段的options。这些选项通常包括默认情况下选择的空白选项。如果需要该字段,这将迫使用户进行选择。如果模型字段具有blank = False和明确的默认值(默认情况下默认选择默认值),则不包括空白选项。

因此,要排除表格中的空白选项blank=Falsedefault必须同时提供和。仅设置blank=False将不起作用。


Nar*_*ary 0

像下面那样做。

import copy
from django import forms
from .models import Theme

class InhSelect(forms.widgets.Select):
    def __deepcopy__(self, memo):
        self.choices = self.choices[1:]
        obj = copy.copy(self)
        obj.attrs = self.attrs.copy()
        obj.choices = copy.copy(self.choices)
        memo[id(self)] = obj
        return obj

class MyRadioSelect(forms.widgets.RendererMixin, InhSelect):
    renderer = forms.widgets.RadioFieldRenderer
    _empty_value = ''

class ThemeForm(forms.ModelForm):

    class Meta:
        model = Theme
        widgets = {'favorite_theme' : MyRadioSelect(),}
        fields=('favorite_theme',)
Run Code Online (Sandbox Code Playgroud)