2016-04-17 11 views
0

Ich möchte mein Benutzerprofil Daten aktualisieren.Aber wenn dieser Fehler 'Funktion' Objekt hat kein Attribut 'as_view'.Warum zeigen diese Fehler 'Funktion' Objekt hat kein Attribut 'as_view'

ich Django bin mit 1.8, Python 2.7

Ich bin neu in Django.

urls.py Code:

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)) 

models.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 %} 
+1

Ihre Klassen prüfen es ist wahrscheinlich, dass Sie 'def' statt' CLASS' irgendwo in eine deiner Dateien – Pythonista

+0

Können Sie bitte den gesamten Traceback posten? Vielen Dank. – mariodev

Antwort

0

Ihre UserProfileUpdate Ansicht sollte wie folgt aussehen:

from django.utils.decorators import method_decorator 
from django.contrib.auth.decorators import login_required 


class UserProfileUpdate(UpdateView): 
    model = UserProfile 
    fields = ('name', 'website',) 

    @method_decorator(login_required) 
    def dispatch(self, request, *args, **kwargs): 
     return super(UserProfileUpdate, self).dispatch(self, request, *args, **kwargs) 
+0

Danke, ich habe meinen Fehler und löse ihn. Jetzt ist es Arbeit :) –

0

Sie nicht die login_required Dekorateur für eine Klasse wie das verwenden können. Sie müssen method_decorator verwenden. Auf Django 1.9+, können Sie die Klasse dekorieren:

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',) 

Auch hier überprüfen Django/python: 'function' object has no attribute 'as_view' @Alasdair gab ein Beispiel und Erklärung