2015-12-11 18 views
6

Tôi đang cố gắng sử dụng chế độ xem dựa trên lớp học và gặp lỗi lạ. Con đường tôi đang sử dụng xem có vẻ là cách thông thường:'chức năng' đối tượng không có thuộc tính 'as_view'

thành phần/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] 

thành phần/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'] 

thành phần/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'), 
) 

tôi nhận được

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

Tôi đang sử dụng django 1.8.5. Tại sao chế độ xem này không hoạt động? Cảm ơn bạn

Trả lời

14

IngredientCreateView phải là một lớp học. Vì vậy views.py bạn thay thế:

def IngredientCreateView(CreateView): 

với:

class IngredientCreateView(CreateView): 
3

IngredientCreateView là một chức năng, không phải là một lớp.

Các dòng sau

def IngredientCreateView(CreateView): 

nên được thay thế với

class IngredientCreateView(CreateView): 
+1

idk mà là đầu tiên, nhưng cảm ơn bạn. thói quen cũ chết cứng, phải quen với lớp học :) – codyc4321

Các vấn đề liên quan