cod*_*321 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]
Run Code Online (Sandbox Code Playgroud)
配料/ 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']
Run Code Online (Sandbox Code Playgroud)
配料/ 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'),
)
Run Code Online (Sandbox Code Playgroud)
我明白了
AttributeError at /ingredients/new_ingredient
'function' object has no attribute 'as_view'
Run Code Online (Sandbox Code Playgroud)
我在django 1.8.5.为什么这个观点不起作用?谢谢
kru*_*ubo 36
就我而言,问题在于我试图在基于类的视图上使用 @decorator ,就好像它是基于函数的视图一样,而不是正确地 @decorating 类。
编辑:从链接页面,这是一种将 @login_required 应用于基于类的视图的方法:
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
@method_decorator(login_required, name='dispatch')
class ProtectedView(TemplateView):
Run Code Online (Sandbox Code Playgroud)
Anu*_*dra 27
IngredientCreateView应该是一个班级.所以你的views.py取代:
def IngredientCreateView(CreateView):
Run Code Online (Sandbox Code Playgroud)
有:
class IngredientCreateView(CreateView):
Run Code Online (Sandbox Code Playgroud)
IngredientCreateView 是一个功能,而不是一个类.
以下行
def IngredientCreateView(CreateView):
Run Code Online (Sandbox Code Playgroud)
应该替换
class IngredientCreateView(CreateView):
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27643 次 |
| 最近记录: |