2014-09-08 3 views
0

양식을 채울 때이 오류가 발생합니다. 여기 AttributeError : 'NoneType'객체에 'all'속성이 없습니다.

양식 자체이다 :

class locationForm(forms.Form): 
    #this form is sent through to give options 
    existing_regions= forms.ModelChoiceField(queryset=None, label="Region Name") 
    #this form is what is actually is used to determine the associated region (via get_or_create) 
    #look at view for details 
    region_name = forms.CharField() 
    location_name = forms.CharField() 
    street_address = forms.CharField() 
    city = forms.CharField() 
    zip_code = forms.CharField() 

그리고이 양식에 대한 get_or_create을하는 뷰 사용하고 있습니다 : 당신이 볼 수 있듯이

class AddLocation(View): 

    template_name = "dash/Addlocation.html" 
    form = locationForm() 

    def post(self, request, *args, **kwargs): 
     form = locationForm(request.POST) 
     user = User.objects.get(username=request.user.username) 
     form.fields['existing_regions'].queryset = Region.objects.filter(location__manager=user) 
     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 = region_obj, 
       name = form.cleaned_data['location_name'], 
       street_address = form.cleaned_data['street_address'], 
       city = form.cleaned_data['city'], 
       zip_code = form.cleaned_data['zip_code'] 
      ) 
      location.save() 
      own_it = user.get_profile().owned_locations.add(location) 

     else: 
      form = locationForm(request.POST) 
      form.fields['region_name'].queryset = Region.objects.filter(location__manager=user) 
      return render(request, self.template_name, {'form': form}) 

의 'existing_regions'형태로 제공됩니다 그냥 옵션을 제공하기 위해 프런트 엔드에. 그러나 궁극적으로 프론트 엔드는 선택된 이름을 'region_name'으로 전달하고 Location으로 저장되는 객체를 빌드하는 데 사용됩니다. 이것이 최선의 방법인지 확실하지 않지만이 오류가 어떻게 발생했는지 알 수 없습니다. 필요한 경우 세부 정보를 제공 할 수 있습니다. 이 점을 밝힐 수있는 사람에게 미리 감사드립니다.

여기

Internal Server Error: /dash/location/add 
Traceback (most recent call last): 
    File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 114, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/Library/Python/2.7/site-packages/django/contrib/auth/decorators.py", line 22, in _wrapped_view 
    return view_func(request, *args, **kwargs) 
    File "/Library/Python/2.7/site-packages/django/views/generic/base.py", line 69, in view 
    return self.dispatch(request, *args, **kwargs) 
    File "/Library/Python/2.7/site-packages/django/views/generic/base.py", line 87, in dispatch 
    return handler(request, *args, **kwargs) 
    File "/Users/nir/dashboard/pinpoint/apps/locationmanager/views.py", line 64, in post 
    return render(request, self.template_name, {'form': form}) 
    File "/Library/Python/2.7/site-packages/django/shortcuts/__init__.py", line 53, in render 
    return HttpResponse(loader.render_to_string(*args, **kwargs), 
    File "/Library/Python/2.7/site-packages/django/template/loader.py", line 169, in render_to_string 
    return t.render(context_instance) 
    File "/Library/Python/2.7/site-packages/django/template/base.py", line 140, in render 
    return self._render(context) 
    File "/Library/Python/2.7/site-packages/django/template/base.py", line 134, in _render 
    return self.nodelist.render(context) 
    File "/Library/Python/2.7/site-packages/django/template/base.py", line 840, in render 
    bit = self.render_node(node, context) 
    File "/Library/Python/2.7/site-packages/django/template/debug.py", line 78, in render_node 
    return node.render(context) 
    File "/Library/Python/2.7/site-packages/django/template/debug.py", line 91, in render 
    output = force_text(output) 
    File "/Library/Python/2.7/site-packages/django/utils/encoding.py", line 100, in force_text 
    s = s.__unicode__() 
    File "/Library/Python/2.7/site-packages/django/forms/forms.py", line 425, in __str__ 
    return self.as_widget() 
    File "/Library/Python/2.7/site-packages/django/forms/forms.py", line 475, in as_widget 
    return widget.render(name, self.value(), attrs=attrs) 
    File "/Library/Python/2.7/site-packages/django/forms/widgets.py", line 504, in render 
    options = self.render_options(choices, [value]) 
    File "/Library/Python/2.7/site-packages/django/forms/widgets.py", line 528, in render_options 
    for option_value, option_label in chain(self.choices, choices): 
    File "/Library/Python/2.7/site-packages/django/forms/models.py", line 1044, in __iter__ 
    for obj in self.queryset.all(): 
AttributeError: 'NoneType' object has no attribute 'all' 
+2

오류의 * 전체 * 추적을 포함해야합니다. –

+0

전체 추적을 추가했습니다 – ApathyBear

+1

'existing_regions'에서'queryset = None'을'queryset = MyModel.objects.none()'으로 변경해보십시오. – karthikr

답변

1

원래 오류가 None의 검색어로 ModelChoiceField를 선언 결코 게시물 전에 하나를 할당하지에서 오는 전체 역 추적을합니다. 당신이 CBV를 사용하고 있기 때문에, 또한

def get(self, request, *args, **kwargs): 
    form = locationForm() 
    # Assing proper ModelChoice queryset. 
    form.fields['existing_regions'].queryset = Region.objects.filter(
     location__manager=self.request.user) 
    # Here put the rest of your get code... 

을 당신은 FormView 대신 일반보기의를 사용하는 것으로 간주 한이 같은 get 기능, 무언가를 추가하려고?

관련 문제