代码之家  ›  专栏  ›  技术社区  ›  msln

为什么基于类的视图返回的类型对象“Profile”没有属性“model”?

  •  1
  • msln  · 技术社区  · 8 年前

    这是项目URL。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")
    ]
    

    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
    

    例如,我转到以下url:

    localhost:8000/ivan/
    

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

    如果我传递了一个正确或不正确的用户名和url来查看,那么每次都会出现这个错误。

    2 回复  |  直到 8 年前
        1
  •  3
  •   wencakisa    8 年前

    当你打电话的时候 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
    
        2
  •  1
  •   csling    8 年前

    然后在视图中以这种方式调用模型。