1

我有一个网站与Django。为什么基于类的视图返回类型对象'Profile'没有属性'model'?

这是项目urls.py:

urlpatterns = [ 
url(r'^admin/', admin.site.urls), 
url(r'^', include('accounts.urls')), 
url(r'^login/$', LoginView.as_view(), name='login'), 
url(r'^register/$', RegisterView.as_view(), name='register'), 
url(r'^logout/$', logout_view, name="logout") 
] 

,这是accounts.urls:

from . import views 
urlpatterns = [ 
url(r'(?P<username>[\w]+)/$', views.Profile.as_view(), name='profile_cbv'), 
] 

,这是剖面模型:

class Profile(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile', verbose_name='user', on_delete=models.CASCADE) 
    name = models.CharField(max_length=30, verbose_name='name') 
    family = models.CharField(max_length=50, verbose_name='family') 

,并在最后,这是Profile基于类的视图:

class Profile(View): 
def get(self, request, username=None): 
    profile = get_object_or_404(Profile, user__username=username) 

    print(profile) 
    pass 

例如,我去以下网址:

localhost:8000/ivan/ 

它提出了以下错误:

AttributeError at /ivan/ 
type object 'Profile' has no attribute 'model' 

如果我通过正确或URL不正确的用户名来查看,所有的时间它会引发这个错误。

有什么问题?

+0

首先,你应该改名叫'Profile'成别的东西 – PRMoureu

回答

2

当你调用get_object_or_404(Profile, ...),它需要Profile不是你模式,但你视图。这就是你收到这个错误的原因。

尝试重命名class Profile(View)class ProfileView(View)

from . import views 
urlpatterns = [ 
    url(r'(?P<username>[\w]+)/$', views.ProfileView.as_view(), name='profile_cbv'), 
] 

而在你views.py

class ProfileView(View): 
    def get(self, request, username=None): 
     profile = get_object_or_404(Profile, user__username=username) 

     print(profile) 
     pass 
+0

是的,如你所说,这个问题的看法是因为模型和视图的名字是一样的。非常感谢你 – msln

+0

@MojtabaSalehiyan不客气。如果我的答案帮助你确保将其标记为已接受。 – wencakisa

1

它看起来像在视图中的名称问题。您的视图类名称与模型类相同。将Model类导入为其他内容。例如:

from .models import Profile as ProfileModel

然后在视图中调用模型。

相关问题