【问题标题】:'QueryDict' object has no attribute 'association''QueryDict' 对象没有属性 'association'
【发布时间】:2017-03-11 19:06:08
【问题描述】:

管理员(已登录)想要注册一个与管理员具有相同关联名称的成员,但它会引发此错误。

我有什么遗漏吗?

还是个新手,感谢你们的帮助,伙计们!

管理员\models.py

class Administrator(AbstractUser):
    ...
    association= models.ForeignKey(Association)


    class Meta:
        db_table = 'Administrator'

成员\models.py

from pl.admin.models import Administrator


class Association(models.Model):
    asoc_name = models.CharField(max_length=100)

    class Meta:
        db_table = 'Association'

    def __str__(self):
        return self.asoc_name

forms.py

class RegForm(forms.ModelForm):
    ...
    association = forms.ModelChoiceField(queryset=Association.objects.none())
     ...


    class Meta:
        model = Administrator
        fields = [..., 'association', ...]

    def __init__(self, user, *args, **kwargs):
        super(RegForm, self).__init__(*args, **kwargs)
        self.fields['association'].queryset = Association.objects.filter(
                                              asoc_name=user.association)

views.py

def member_signup(request):
    if request.method == 'POST':
        form = RegForm(request.POST, request.user)
        if not form.is_valid():
            return render(request, 'member/member_signup.html',
                          {'form': form})

        else:
            ...
            asoc = form.cleaned_data.get('association')
            ...
            Member.objects.create(...
                                  association=asoc,    
                                  ...)
            user = authenticate(...
                                association=asoc,
                                ...)
            return redirect('/')

    else:
        return render(request, 'member/member_signup.html',
                      {'form': RegForm(request.user)})

使用回溯编辑

Traceback (most recent call last):
   File "C:\Python36\lib\site-packages\django\core\handlers\exception.py", line 39, in inner
      response = get_response(request)
   File "C:\Python36\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
      response = self.process_exception_by_middleware(e, request)
   File "C:\Python36\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
      response = wrapped_callback(request, *callback_args, **callback_kwargs)
   File "C:\...\member\views.py", line 184, in member_signup
      form = RegForm(request.POST, request.user)
   File "C:\...\member\forms.py", line 113, in __init__
      self.fields['association'].queryset = Association.objects.filter(asoc_name=user.association)
AttributeError: 'QueryDict' object has no attribute 'association'

【问题讨论】:

  • 你能提供回溯吗?
  • @JensAstrup 添加了回溯

标签: python django python-2.7 python-3.x django-views


【解决方案1】:

user 是表单的 first 参数,但在 if 子句中,您将其作为第二个参数传递,在 request.POST 之后。

通常你应该避免改变表单实例化的签名;相反,您应该将用户作为关键字参数传递并从kwargs 获取。

【讨论】:

    猜你喜欢
    • 2015-10-13
    • 2020-02-15
    • 2020-07-05
    • 2021-02-22
    • 2011-06-23
    • 2016-09-30
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多