'function'对象没有属性'as_view'

时间:2015-12-11 06:30:17

标签: python django django-class-based-views

我正在尝试使用基于类的视图,并得到一个奇怪的错误。我使用视图的方式似乎是正常的方式:

成分/ models.py:

from django.db import models
from django.utils import timezone


class Ingredient(models.Model):
    name        = models.CharField(max_length=255)
    description = models.TextField()

    def get_prices():
        purchases   = self.purchase_set.all()
        prices      = [purchase.price for purchase in purchases]

成分/ views.py:

from django.shortcuts           import render, render_to_response, redirect
from django.http                import HttpResponse, HttpResponseRedirect
from django.views.generic.edit  import CreateView
from .models                    import Ingredient, Purchase

def IngredientCreateView(CreateView):
    model = Ingredient
    fields = ['all']

成分/ urls.py:

from django.conf.urls import patterns, include, url

from ingredients.views import IngredientCreateView

urlpatterns = patterns('',            
    url(r'^new_ingredient$',          IngredientCreateView.as_view(),             name='new-ingredient'),
)

我得到了

AttributeError at /ingredients/new_ingredient
'function' object has no attribute 'as_view'

我在django 1.8.5。为什么这个观点不起作用?谢谢

6 个答案:

答案 0 :(得分:22)

def IngredientCreateView(CreateView): 应该是一个班级。 所以你的views.py替换:

class IngredientCreateView(CreateView):

使用:

IngredientCreateView

答案 1 :(得分:5)

def IngredientCreateView(CreateView): 是一个函数,而不是一个类。

以下一行

class IngredientCreateView(CreateView):

应替换为

Value

答案 2 :(得分:2)

在我的情况下,问题是我试图在基于类的视图上使用@decorator,就像它是基于函数的视图一样,而不是@decorating the class correctly

答案 3 :(得分:0)

除了此处已说过的内容外,检查文件名和类名是否相同,则可能必须正确导入该类。

File name /api/A.py

class A:
//some methods

在你的主要班级

//App main class
from api.A import A

答案 4 :(得分:0)

我遇到了同样的问题,但是这个解决方案对我有用。

在ViewClass的 views.py 文件中

,您可以使用视图集代替CreateView

            from rest_framework import viewsets
            class YourClassView(viewsets.ModelViewSet):

urls.py 文件中,您可以使用此路由模式

          from django.conf.urls import url
          from rest_framework import routers

          router = routers.DefaultRouter()
          router.register('books',YourClassView)

          urlpatterns = [
               path('', include(router.urls)),
               path('admin/', admin.site.urls)
            ]

答案 5 :(得分:0)

def Some_def_View(CreateView):

#应替换为

class SomeClassView(CreateView)