我想更新我的用户配置文件数据。但是运行时出现此错误“function”对象没有属性“as_view”。
我使用的是 Django 1.8,python 2.7
我是 Django 新手。
urls.py代码:
from django.conf.urls import include, url
from . import views
urlpatterns = [
url(r'^(?P<pk>\d+)/$',
views.UserProfileDetail.as_view(),
name='user_profile_detail'),
url(r'^(?P<pk>\d+)/update/$',
views.UserProfileUpdate.as_view(),
name='user_profile_edit'),
]
views.py:
from django.shortcuts import render
from blog.models import Post, UserProfile
from blog.forms import UserForm, UserProfileForm, PostForm
from django.contrib.auth.models import User
from django.views.generic import DetailView
from django.views.generic import CreateView, UpdateView
from .models import UserProfile
class UserProfileDetail(DetailView):
model = UserProfile
@login_required
class UserProfileUpdate(UpdateView):
model = UserProfile
fields = ('name', 'website',)
def get(self, request, *args, **kwargs):
UserProfile(kwargs['pk'])
return (super(UserProfileUpdate, self).
get(self, request, *args, **kwargs))
模型.py
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User)
name = models.CharField(max_length=30)
website = models.URLField(blank=True)
def __unicode__(self):
return self.user.username
html:
{% extends 'blog/base.html' %}
{% block content %}
<h2>Edit {{ object.user.username }} Profile</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Update" />
</form>
{% endblock %}
最佳答案
你不能在这样的类上使用login_required装饰器。您需要使用method_decorator。在 Django 1.9+ 上,您可以修饰类:
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
@method_decorator(login_required, name='dispatch')
class UserProfileUpdate(UpdateView):
model = UserProfile
fields = ('name', 'website',)
另请查看此处 Django/python: 'function' object has no attribute 'as_view' @Alasdair 给出了一个例子和解释
关于python - 为什么显示此错误 'function' 对象没有属性 'as_view',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36680358/