我正在try 构建定制的django表单,用于更改应用程序的用户名和用户邮箱.这就是为什么我需要将用户详细信息从会话传递到表单,以便判断登录的用户是否存在.我是这样做的:

在views.py中

personal_info_form = PersonalInfoForm(prefix='personal_info',
                                      user_details=user_details)

其中user_details是一本字典:

'user_details': [{'username': u'username', 
                  'registration_date': datetime.date(2009, 10, 22), 
                  'id': 13, 'email': u'user@mail.com'}]}

在形式上.我有以下代码:

class PersonalInfoForm(forms.Form):

    def __init__(self, *args, **kwargs):
        user_details = kwargs.pop('user_details', None)
        super(PersonalInfoForm, self).__init__( *args, **kwargs)

    username = forms.CharField(required=True, initial=user_details[0]['username'])
    email = forms.EmailField(required=True)

我得到以下错误:

name 'user_details' is not defined

我try 用self.user_details访问它,但只有user_details,它给出了同样的错误

推荐答案

user_details被传递给__init__,因此没有在其外部定义.这就是在实例化Charfield对象时无法访问它的原因.在__init__中设置initial,在您从Kwargs弹出之后,例如:

class PersonalInfoForm(forms.Form):

    username = forms.CharField(required=True)
    email = forms.EmailField(required=True)

    def __init__(self, *args, **kwargs):
        user_details = kwargs.pop('user_details', None)
        super(PersonalInfoForm, self).__init__(*args, **kwargs)
        if user_details:
            self.fields['username'].initial = user_details[0]['username']

当你有机会,考虑阅读scopes in python.

Django相关问答推荐

Django ORM ForeignKey查询使用注释设置输出

Django:作为模型中的列表元素的字段

在Django ORM中引用非主外键

Django Form标签和action属性

在 Trunc 的 kind 属性中使用字段

如何创建复杂的查询?| ChartJS 和 Django

Django中用于外键的嵌套循环

来自 Django 应用程序的日志(log)消息未上传到 AWS CloudWatch

Django 和 HTML 无法从指定时间开始视频

有没有办法将变量传递给 Django 中的 extended模板?

在 Django 过滤器语句中,__exact 和等号 (=) 有什么区别?

Django查询在哪里

如何在 Django Rest Framework SimpleRouter 上使斜杠可选

Python:获取异常的错误消息

现在如何在 Django 中处理每个对象的权限?

我应该如何在我的模型中使用 DurationField?

Django manage.py:在其依赖之前应用迁移

AssertionError: `HyperlinkedIdentityField` 需要序列化程序上下文中的请求

在 django admin 中控制 TextArea 小部件的大小

Numpy 数组到 base64 并返回到 Numpy 数组 - Python