【问题标题】:I can't use my django model values in forms.py. I get : name 'user' is not defined我不能在 forms.py 中使用我的 django 模型值。我得到:名称“用户”未定义
【发布时间】:2017-09-12 13:58:23
【问题描述】:

我正在尝试使用 django 模型中的值,但我的代码中缺少某些内容,我无法弄清楚它是什么。

我正在使用 django 1.11

我需要表单类来继承请求吗?万一,我该怎么做?

from django import forms
from .models import Profile
from django.contrib.auth.models import User
from django.shortcuts import render

class form(forms.Form):
  department_string = ((user.profile.departnemt_1_number, 'Afd A',), ('2', 'Afd B',),)
  afdeling = forms.ChoiceField(widget=forms.RadioSelect, choices=department_string, initial='1')

我得到:异常值:未定义名称“用户”

非常感谢任何帮助!

【问题讨论】:

    标签: python django


    【解决方案1】:

    你不能在那个时候定义它;在定义表单的地方没有user

    您需要覆盖表单的 __init__ 方法以接受来自用户的额外关键字参数并适当地修改选项。

    class MyForm(forms.Form):
      afdeling = forms.ChoiceField(widget=forms.RadioSelect, initial='1')
    
      def __init__(self, *args, **kwargs):
         user = kwargs.pop('user')
         super(MyForm, self).__init__(*args, **kwargs)
         self.fields['afdeling'].choices = ((user.profile.departnemt_1_number, 'Afd A',), ('2', 'Afd B',),)
    

    不要忘记从视图中传递用户:

    if request.method == 'POST':
           form = MyForm(request.POST, user=request.user)
           ...
        else:
           form = MyForm(request.POST, user=request.user)
        ...
    

    【讨论】:

    • 谢谢!为什么我调用 super 方法?不是用来调用继承类的init方法吗?重写 init 方法是什么意思?以前有吗?
    • 是的,它用于调用继承类中的方法,这正是您在这里所做的。
    猜你喜欢
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    相关资源
    最近更新 更多