【问题标题】:NoneType' object has no attribute 'model'NoneType' 对象没有属性 'model'
【发布时间】:2014-08-13 18:38:29
【问题描述】:

我的一个表单给了我这个错误,我似乎无法弄清楚问题是什么。

11:24:04 web.1  | Internal Server Error: /dash/location/add
11:24:04 web.1  | Traceback (most recent call last):
11:24:04 web.1  |   File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 114, in get_response
11:24:04 web.1  |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
11:24:04 web.1  |   File "/Library/Python/2.7/site-packages/django/contrib/auth/decorators.py", line 22, in _wrapped_view
11:24:04 web.1  |     return view_func(request, *args, **kwargs)
11:24:04 web.1  |   File "/Library/Python/2.7/site-packages/django/views/generic/base.py", line 69, in view
11:24:04 web.1  |     return self.dispatch(request, *args, **kwargs)
11:24:04 web.1  |   File "/Library/Python/2.7/site-packages/django/views/generic/base.py", line 87, in dispatch
11:24:04 web.1  |     return handler(request, *args, **kwargs)
11:24:04 web.1  |   File "/Users/nir/dashboard/pinpoint/apps/locationmanager/views.py", line 43, in post
11:24:04 web.1  |     if form.is_valid():
11:24:04 web.1  |   File "/Library/Python/2.7/site-packages/django/forms/forms.py", line 129, in is_valid
11:24:04 web.1  |     return self.is_bound and not bool(self.errors)
11:24:04 web.1  |   File "/Library/Python/2.7/site-packages/django/forms/forms.py", line 121, in errors
11:24:04 web.1  |     self.full_clean()
11:24:04 web.1  |   File "/Library/Python/2.7/site-packages/django/forms/forms.py", line 273, in full_clean
11:24:04 web.1  |     self._clean_fields()
11:24:04 web.1  |   File "/Library/Python/2.7/site-packages/django/forms/forms.py", line 288, in _clean_fields
11:24:04 web.1  |     value = field.clean(value)
11:24:04 web.1  |   File "/Library/Python/2.7/site-packages/django/forms/fields.py", line 148, in clean
11:24:04 web.1  |     value = self.to_python(value)
11:24:04 web.1  |   File "/Library/Python/2.7/site-packages/django/forms/models.py", line 1136, in to_python
11:24:04 web.1  |     except (ValueError, self.queryset.model.DoesNotExist):
11:24:04 web.1  | AttributeError: 'NoneType' object has no attribute 'model'

这是发生错误的视图:

class AddLocation(View):

    template_name = "dash/Addlocation.html"
    form = locationForm()
    def get(self, request, *args, **kwargs):
        user = User.objects.get(username=request.user.username)
        self.form.fields['region_name'].queryset = Region.objects.filter(location__manager=user)
        return render(request, self.template_name, {'form': self.form})

    def post(self, request, *args, **kwargs):
        form = locationForm(request.POST)
        if form.is_valid():
            region_obj, _created = Region.objects.get_or_create(name=form.cleaned_data['region_name'])
            form.cleaned_data['region_name'] = region_obj
            user = User.objects.get(username=request.user.username)
            location = Location(
                region_obj,
                user,name = form.cleaned_data['name'],
                street_address = form.cleaned_data['street_address'],
                city = form.cleaned_data['city'],
                zip_code = form.cleaned_data['zip_code']
            )
            location.save()

            return redirect(reverse('location_manager'))
        else:
            form = locationForm(request.POST)
            return render(request, self.template_name, {'form': form})

特别是在尝试验证 if form.is_valid(): 时似乎出现了问题

如果需要,我可以发布更多信息,但我真的不知道这个错误是什么意思。有人可以对此有所了解吗?

编辑: 这是表单本身

from django import forms


    class locationForm(forms.Form):
        region_name = forms.ModelChoiceField(queryset=None, label="Region Name")
        location_name = forms.CharField()
        street_address = forms.CharField()
        city = forms.CharField()
        zip_code = forms.CharField()

【问题讨论】:

  • locationForm 是什么样子的?
  • 这里:user,name = form.cleaned_data['name'], 你只定义了name 而不是user
  • 另外,您的 post() 方法缺少 ELSE。它只有一个IF。如果 IF 有效语句失败怎么办?
  • 您确实应该为表单本身提供代码。
  • 我已经为基于类的 View Aron Ysidoro 添加了完整的代码,你可以看到 else 就在那里,我只提供了一个 sn-p。 Zclancy & Daniel Roseman,我已经提供了表格本身。任何帮助将不胜感激。

标签: python django django-models django-forms django-views


【解决方案1】:

您已将 region_name 的查询集显式定义为 None。这是无效的:您需要一个查询集。您确实在视图的 get 方法中正确分配了一个查询集,但在帖子中却没有,所以当然,当在帖子中验证表单时,它会失败。

在调用super 之后,您应该真正覆盖表单的__init__ 方法并在那里分配查询集,而不是在视图中这样做。

【讨论】:

  • 嗨!几年后,我收到了这个确切的消息,但我正在按照你说的那样在表单的 init 方法中设置查询集。此外,使用查询集中的正确选项,表单会按预期在模板中呈现。提交表单时会给出此错误。本地变量也暗示了我期望的值。真的不知道是什么触发了消息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 2014-07-05
  • 2018-05-05
  • 2013-02-11
  • 2018-12-01
  • 2017-08-02
  • 2021-04-27
相关资源
最近更新 更多