【问题标题】:Django Forms: Empty kwargs from ViewsDjango Forms:视图中的空 kwargs
【发布时间】:2015-04-24 00:29:42
【问题描述】:

我正在尝试使用视图中的参数初始化 Django 表单。但是,当我尝试在表单的 init 中使用 kwargs 时,我发现它总是空的。为什么会这样?我错过了什么吗?

我的观点(文件名:“FirstView.py”):

def create_userStory(request, proyect_id):

if request.method=='POST':
    auxForm = UserStoryForm(request.POST, proyect_id=proyect_id)

我的表单(文件名:“forms.py”):

class UserStoryForm(forms.ModelForm):

def __init__(self, *args, **kwargs):
    proyectId = kwargs.pop('proyect_id', None)
    super(UserStoryForm, self).__init__(*args, **kwargs)
    team = Team.objects.get(proyect_id=proyectId)

我尝试在我的表单中调试/打印 kwargs,但我总是得到 {},这意味着视图中的参数没有通过。

之前我尝试关注这些现有问题:

django form: Passing parameter from view.py to forms gives out error

Django Forms: pass parameter to form

Django formset - empty kwargs

【问题讨论】:

    标签: python django forms parameters keyword-argument


    【解决方案1】:

    我遇到了同样的问题。 经过一小时的搜索(...),我在给__init__ 的电话中发现了这一点:

    myModelForm(request.POST, namedargument=val)

    val 实际上是 None,当我认为它包含一个值时。

    那么,对于__init__:如果namedargument=None ==> namedargument 单独。 kwargs 变成 args

    这就是为什么 kwargs 是空的。

    所以,检查你传递的值,它可能是错误的None

    (我知道,这是一个 2 年的答案,但我很想在一小时前找到这个……)

    【讨论】:

      【解决方案2】:

      签名中的*args**kwargs 用于捕获尚未被其他定义的参数位置占用的参数。 所有未使用的未命名参数将被放置在一个列表args 中,所有命名参数都将放在一个字典 kwargs 中。您可以根据需要更改名称。

      一个例子:

      def function_1(a, b, *args, **kwargs):
      

      类似的电话

      function_1(1, 2, 3, 4, c=5, d=6)
      

      将在 function_1 中产生以下可用变量:

      a = 1
      b = 2
      args = (3, 4)
      kwargs = {'c': 5, 'd': 6}
      

      因此应用于您的问题,这意味着只要您没有任何命名参数,您就会有一个空的kwargs

      【讨论】:

      • 他有命名参数:proyect_id: `auxForm = UserStoryForm(request.POST, proyect_id=proyect_id)`。所以我认为问题不在于这里。
      猜你喜欢
      • 2012-12-08
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多