在 Django 中使用 DetailView 查看用户配置文件

萨米尔·滕杜尔卡

我需要简单博客网站的帮助。用户可以写帖子的地方。每个帖子作者都必须登录才能撰写帖子。但读者不必登录。

我正在使用 django DetailView 来允许读者查看帖子作者的个人资料。

个人资料视图将包含作者的详细信息以及作者撰写的其他帖子。

我使用以下逻辑来制作视图https://chriskief.com/2012/12/29/django-generic-detailview-without-a-pk-or-slug/

以下是详细信息:

所有这些都在我网站的帐户应用程序中。下面的代码被破坏并给出错误

错误消息的图像

帐户/视图.py:

    class ProfileView(DetailView):
            model = User
            template_name = 'accounts/profile.html'

            def get_user_profile(self, username):   
                return get_object_or_404(User, pk=username)
     #I know pk=username is not correct. I am not sure what to put pk=?

  # I was able to get the writers other posts using the code below. I did not have to show this code for this question. But just to show you that the pk above has to be username. Or Else the code below won't work(I guess)        
            def get_context_data(self, **kwargs):
                context = super(ProfileView, self).get_context_data(**kwargs)
                context['post_list'] = Post.objects.filter(user__username__iexact=self.kwargs.get('username'))
                return context  

我的模型如下

帐户/模型.py:

from django.contrib.auth.models import User
from django.db import models

    class UserProfile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        city = models.CharField(max_length=100)
        country = models.CharField(max_length=100)
        bio = models.TextField(default='', blank=True)
        profile_image = models.ImageField(default='', blank=True, null='')


        def __str__(self):
            return "Profile of {}".format(self.user.username)

下面是我的模板

    {% extends 'base.html' %}

    {% block body %}
    <div class="content">
        <h1>{{user.first_name}} {{user.last_name}}</h1>
        <p>            
            <br/>From: City, Country
            <br/>Bio
            <br/>Profile Image
        </p>
    </div>


    {% endblock %}

帐户/网址.py

from django.conf.urls import url
from . import views
from django.contrib.auth.views import LoginView, LogoutView

app_name = 'accounts'

urlpatterns = [
    url(r'^login/$', LoginView.as_view(template_name='accounts/login.html'), name='login'),
    url(r'^logout/$', LogoutView.as_view(), name='logout'),
    url(r'^signup/$', views.SignUp.as_view(), name='signup'),
    url(r'^profile/(?P<username>[-\w]+)/$', views.ProfileView.as_view(), name='profile'),

]

错误消息文本

/accounts/profile/3/ 处的 AttributeError 必须使用对象 pk 或 slug 调用通用详细信息视图 ProfileView。请求方法:GET 请求 URL:http : //127.0.0.1 :
8000/accounts/profile/3/ Django 版本:1.11 异常类型:AttributeError 异常值:必须使用对象 pk 或 slug 调用通用详细信息视图 ProfileView。异常位置:C:\Users\Samir\Miniconda3\envs\MyDjangoEnv\lib\site-packages\django-1.11-py3.6.egg\django\views\generic\detail.py in get_object, line 49 Python Executable: C :\Users\Samir\Miniconda3\envs\MyDjangoEnv\python.exe Python 版本:3.6.4 Python 路径:........

马科斯·费利佩

如果您使用“用户名”字段来获取用户,您可能需要更改过滤器以使用“用户名”字段,因为它是唯一的:

尝试更改功能:

def get_user_profile(self, username):   
    return get_object_or_404(User, pk=username)

def get_object(self):
    return get_object_or_404(User, username=self.kwargs.get('username'))

或者

如果您希望对象成为 UserProfile,则将其稍微更改为

def get_object(self):
        return get_object_or_404(UserProfile, user__username=self.kwargs['username'])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django:在DetailView类页面中使用For循环

来自分类Dev

使用 Django 表单编辑用户配置文件

来自分类Dev

如何在Django的DetailView中使用prefetch_related

来自分类Dev

在Django中使用pk从updateView到DetailView的success_url

来自分类Dev

在Django的DetailView中使用get_object()和Aggregate()

来自分类Dev

如何在Django的DetailView中使用prefetch_related

来自分类Dev

在DetailView中使用对象

来自分类Dev

在使用 DetailView (Django) 访问之前更新对象

来自分类Dev

Django 1.6使用现有用户编辑用户配置文件模型

来自分类Dev

Django - 在为帐户类型创建用户期间使用配置文件模型扩展用户

来自分类Dev

使用 Django 过滤器根据用户配置文件限制对数据的访问

来自分类Dev

如何在Django DetailView中使用URL中的值和请求?

来自分类Dev

如何在Django DetailView中使用URL中的值和请求?

来自分类Dev

在通用detailview django中使用get_context_data重定向

来自分类Dev

在 Django 中使用 forloops 在同一模板中显示 listview 和 detailview

来自分类Dev

使用 Django 管理员用户表单添加内联用户配置文件表单时出现问题

来自分类Dev

django通用DetailView

来自分类Dev

Django DetailView动态模型

来自分类Dev

在DetailView中分页[Django]

来自分类Dev

Django DetailView动态模型

来自分类Dev

Django DetailView发生错误?

来自分类Dev

在母版页中使用用户配置文件属性

来自分类Dev

Django:扩展用户模型与创建用户配置文件模型

来自分类Dev

Django Rest Framework创建用户和用户配置文件

来自分类Dev

使用用户配置文件字段

来自分类Dev

使用django-configuration分割配置文件

来自分类Dev

在Django DetailView中获取表单

来自分类Dev

在Django的detailview中获取方法

来自分类Dev

使用Sentry 2,让Authenticated User查看Laravel 4中其他用户的配置文件

Related 相关文章

  1. 1

    Django:在DetailView类页面中使用For循环

  2. 2

    使用 Django 表单编辑用户配置文件

  3. 3

    如何在Django的DetailView中使用prefetch_related

  4. 4

    在Django中使用pk从updateView到DetailView的success_url

  5. 5

    在Django的DetailView中使用get_object()和Aggregate()

  6. 6

    如何在Django的DetailView中使用prefetch_related

  7. 7

    在DetailView中使用对象

  8. 8

    在使用 DetailView (Django) 访问之前更新对象

  9. 9

    Django 1.6使用现有用户编辑用户配置文件模型

  10. 10

    Django - 在为帐户类型创建用户期间使用配置文件模型扩展用户

  11. 11

    使用 Django 过滤器根据用户配置文件限制对数据的访问

  12. 12

    如何在Django DetailView中使用URL中的值和请求?

  13. 13

    如何在Django DetailView中使用URL中的值和请求?

  14. 14

    在通用detailview django中使用get_context_data重定向

  15. 15

    在 Django 中使用 forloops 在同一模板中显示 listview 和 detailview

  16. 16

    使用 Django 管理员用户表单添加内联用户配置文件表单时出现问题

  17. 17

    django通用DetailView

  18. 18

    Django DetailView动态模型

  19. 19

    在DetailView中分页[Django]

  20. 20

    Django DetailView动态模型

  21. 21

    Django DetailView发生错误?

  22. 22

    在母版页中使用用户配置文件属性

  23. 23

    Django:扩展用户模型与创建用户配置文件模型

  24. 24

    Django Rest Framework创建用户和用户配置文件

  25. 25

    使用用户配置文件字段

  26. 26

    使用django-configuration分割配置文件

  27. 27

    在Django DetailView中获取表单

  28. 28

    在Django的detailview中获取方法

  29. 29

    使用Sentry 2,让Authenticated User查看Laravel 4中其他用户的配置文件

热门标签

归档