【问题标题】:Django - UpdateView - Empty select field?Django - UpdateView - 空选择字段?
【发布时间】:2018-12-27 07:58:59
【问题描述】:

我有一个更新视图:

class Cotisations_des_adherentsUpdate(UpdateView):
    model                = Cotisations_des_adherents
    form_class           = UpdateCotisations_des_adherentsForm
    template_name_suffix = '_update'

还有一个模型(此处摘录):

class Cotisations_des_adherents (models.Model):
    n_reglement                  = models.AutoField(primary_key=True)
    cotisation_acquittee         = models.FloatField(    blank=True  ,     null=True, choices=settings.CHOICE_OUI_NON)
    frais_de_dossier_acquittes   = models.FloatField(    blank=True  ,     null=True, choices=settings.CHOICE_OUI_NON)
    a_jour                       = models.FloatField(    blank=True  ,     null=True, choices=settings.CHOICE_UN_ZERO)

设置值为:

CHOICE_OUI_NON          = [ (1  , "1-oui"     ),
                            (0  , "0-non"     )]
CHOICE_SEXE             = [ (1, "1-Homme"   ),
                            (2, "2-Femme"   ),]

form_class 继承自个人类:

class UpdateCotisations_des_adherentsForm(Cotisations_des_adherentsForm):
    def __init__(self, *args, **kwargs):
        super(UpdateCotisations_des_adherentsForm, self).__init__(*args, **kwargs)  # Call to ModelForm constructor

超类是(此处摘录):

class Cotisations_des_adherentsForm(ModelForm):
    error_css_class     = 'error'
    required_css_class  = 'required'

    class Meta:
        model   = Cotisations_des_adherents
        fields = [   "n_reglement",
                     "cotisation_acquittee",
                     "a_jour",
                    ]           
    def __init__(self, *args, **kwargs):
        super(Cotisations_des_adherentsForm, self).__init__(*args, **kwargs)  

我的问题是在更新视图上我没有看到用户最后保存的值:

cotisation_acquittee         
frais_de_dossier_acquittes   
a_jour                       

给我一​​个空的选择 html :

我从the doc 了解到,CHOICES 选项有一些特别之处:

如果模型字段设置了选项,那么表单字段的小部件将 设置为 Select,选择来自模型字段的选择。 选项通常包括被选中的空白选项 默认。如果该字段是必需的,这将强制用户进行 选择。如果模型字段不包括空白选项 有空白=假和一个明确的默认值(默认值将 而是最初选择)。

(我验证了,db里有保存信息:

|2.0|0.0|1.0

)

如何使数据库中保存的最后一个值出现在更新 html 表单的选择框中?

【问题讨论】:

  • 选项是不变的,如果你想显示选项中已经存在的值,那么你需要动态加载该值。
  • 我不确定我明白你的意思:我想在表单中显示用户保存的最后一个选项(这是我在选项中固定的值之一)
  • 那个子类有什么意义?它根本不会向父类添加任何内容。 (而且定义只调用父类的 __init__ 方法绝对没有意义。)
  • 你为什么在这里使用浮点字段? oui 或 non 的选择应该是一个布尔字段。
  • @romainjouin 啊..知道了。这意味着数据未正确保存。使用时从下拉列表中选择一个选项并保存。然后,当下次填充下拉列表时,如果模型字段之前正确保存,它应该显示最后保存的选项。

标签: python django


【解决方案1】:

此处使用浮点数是您问题的核心。尽管11.0 在数值上是等价的,但它们不是同一个值,因此表单无法将存储在数据库中的1.0 识别为表单中可能的选择之一。

您可以通过使用 1.00.0 作为 CHOICES 元组中的值来解决此问题,但正确的方法是首先使用正确的数据类型,即布尔值。

【讨论】:

    猜你喜欢
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2014-12-03
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多