当前位置: 首页 > 知识库问答 >
问题:

在__init__方法中设置初始Django表单字段值

钦楚青
2023-03-14

Django 1.6

我在Django表单类中有一个工作代码块,如下所示。我用来构建表单字段列表的数据集可以包含任何字段的初始值,而我在表单中设置该初始值时没有成功。如果 field_value:块,下面的块确实填充了初始表单字典属性,但未显示初始值。请注意(如果您想知道).initial 属性在 super() 调用之前不存在。

这能做到吗?

如果是这样的话,我在做什么不正确的事情?

谢啦!

def __init__(self, *args, **kwargs):
    id = kwargs.pop('values_id', 0)
    super(LaunchForm, self).__init__(*args, **kwargs)
    # Lotsa code here that uses the id value
    # to execute a query and build the form
    # fields and their attributes from the 
    # result set

    if field_value:
        self.initial[field_name] = field_value

共有3个答案

越涛
2023-03-14

我想提一下,尽管这可能无法解决您的问题,但发送到表单的“初始”字典kwarg似乎优先于字段['field_name']。

class MyView(View):
    form = MyForm(initial={'my_field': 'first_value'})

class MyForm(Form):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['my_field'].initial = 'second_value'

渲染my_field的初始设置为“first_value”

一些选项(除其他外)可能是:

在初始化表单之前,确定视图中的< code>second_value:

class MyView(View):
    # determine second_value here
    form = MyForm(initial={'my_field': 'second_value'})

在调用 super() 之前,将first_value替换为首字母中的second_value

class MyForm(Form):
    def __init__(self, *args, **kwargs):
        # determine second_value here
        if kwargs.get('initial', None):
            kwargs['initial']['my_field'] = 'second_value'
        super().__init__(*args, **kwargs)

在调用< code>super()之前,请确保< code>'first_value'不在< code>kwargs['initial']中:

class MyForm(Form):
    def __init__(self, *args, **kwargs):
        if kwargs.get('initial', None):
            if kwargs['initial']['my_field']
                del(kwargs['initial']['my_field']
        super().__init__(*args, **kwargs)
        # determine second_value here
        self.fields['my_field'].initial = 'second_value'
邴英毅
2023-03-14

尝试这种方式:

super(ViagemForm, self).__init__(*args, **kwargs)

if field_value:
    #self.initial[field_name] = field_value
    self.fields[field_name].initial = field_value
毕浩渺
2023-03-14

我遇到了完全相同的问题,我这样解决了它:

def __init__(self, *args, **kwargs):
    instance = kwargs.get('instance', None)

    kwargs.update(initial={
        # 'field': 'value'
        'km_partida': '1020'
    })

    super(ViagemForm, self).__init__(*args, **kwargs)

    # all other stuff
 类似资料:
  • 给定以下模型: 以及以下模型窗体,其中包含一些用于儿童模型的额外字段: 我有一个有很多孩子的父母模型。我需要使用一些数学来平衡孩子们的体重(每个孩子的最小和最大体重都有一些限制)。因此,我试图创建一个表单集,允许用户输入每个孩子的最小和最大体重,以提交重新平衡。我想在上述表格中指定一个默认的最小重量和一个默认的最大重量。因此,我的观点如下: 然而,当我输出表单时,我为min_weight和max_

  • 当安装完成并首次启动 Navicat Monitor 时,浏览器会弹出并打开你的 Navicat Monitor 的网址“http://<your_ip_address>:<port_number>”。你需要在欢迎页面完成 Navicat Monitor 的基本配置。 【注意】<your_host_address> 是安装了 Navicat Monitor 的系统的主机名,以及 <port_num

  • 我有一个表单,其中有些字段不是模型的字段。在发送到渲染之前,我想在我的视图中填充它们.. 我的表格: 我的视图代码: 谢啦

  • 我得到一个奇怪的错误: blank=true,null=true)文件“/mypath/lib/python2.7/site-packages/django/forms/fields.py”,第214行,在init super(CharField,self)中。init(*args,**kwargs)类型错误:init()获得意外的关键字参数“null” 在没有收到此错误的情况下,如何使此字段不是

  • 问题内容: 这是形式的字段声明: 我想将初始值设置为,这似乎不起作用。我玩过参数,引号/无引号等,但是没有变化。 如果有可能,谁能给我一个明确的答案?和/或对我的代码段进行必要的调整? 我正在使用Django 1.0 问题答案: 实例化表单时,请尝试设置初始值:

  • 问题内容: 有没有一种简单的方法可以为文本表单字段设置默认值? 问题答案: 可以在创建过程中轻松使用: