组对象在我的详细视图中不起作用

Group objects not working in my detail view

我正在尝试从详细视图访问组对象,但出于一个原因,它没有将对象渲染到我的 HTML 模板,在详细视图中,除了组名称,但我也想能够渲染组封面图像和组用户。我会很感激一些帮助。这是我的详细视图。

def group_main(request, pk):
    context= {}
    group = get_object_or_404(Group,pk=pk)
    context['group'] = group
    return render(request,'group/grouptimeline.html',context)

这是模型

class Group(models.Model):
    group = models.OneToOneField(Group, on_delete=models.CASCADE, related_name='groups')
    member = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="members" )
    cover = models.ImageField(upload_to='group_cover')
    group_name = models.CharField(max_length=200, blank=True)
    description = models.TextField(max_length=500, blank=True)
    pic = models.ImageField(upload_to='path/post/img' ,blank=True)
    date_posted = models.DateTimeField(auto_now_add=True)

这是我的详细信息 html 模板的一部分,它只呈现组名称,但我无法访问 小组封面图片和用户。

<div class="main_content">
            <div class="mcontainer">

                <div class="profile is_group">
                  
                    <div class="profiles_banner">
                        <img src="{{ group.name.cover.url }}" alt="">
                    </div>
                    
                    <div class="profiles_content">

                        <div class="profile_info">
                            <h1> {{ group.name }} </h1>
                            <p> Public group ·  12k members</p>
                        </div>
                        <div class="flex items-center space-x-4">
                            <div class="flex items-center -space-x-4">
                                <img src="assets/images/avatars/avatar-5.jpg" alt="" class="w-10 h-10 rounded-full border-2 border-white">
                                <img src="assets/images/avatars/avatar-6.jpg" alt="" class="w-10 h-10 rounded-full border-2 border-white">
                                <div class="w-10 h-10 rounded-full flex justify-center items-center bg-red-100 text-red-500 font-semibold"> 12+
                                </div>
                            </div>
                        
                            <a href="#" class="flex items-center justify-center h-9 px-5 rounded-md bg-blue-600 text-white  space-x-1.5">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5">
                                    <path fill-rule="evenodd"
                                        d="M10 18a8 8 0 100-16 8 8 0 000 16zm1-11a1 1 0 10-2 0v2H7a1 1 0 100 2h2v2a1 1 0 102 0v-2h2a1 1 0 100-2h-2V7z"
                                        clip-rule="evenodd"></path>
                                </svg>
                                <span> Join </span>
                            </a>
                        </div>
                     
                    </div>

我建议将您的模型重命名为 GroupDetail,否则会产生很多混乱,因为使用了两个模型:Group 来自 django.contrib.auth.models,以及你自己定义的那个。

可能最好将其实现为:

class <strong>GroupDetail</strong>(models.Model):
    group = models.OneToOneField(Group, on_delete=models.CASCADE, related_name='groups')
    # …

然后在视图中,我们可以获取主键的 GroupDetails:

group = get_object_or_404(<strong>GroupDetail</strong>, pk=pk)

或者如果我们想使用引用的 Group 模型的主键,那么它是:

group = get_object_or_404(GroupDetail<strong>, group__pk=pk</strong>)

这意味着视图应该如下所示:

def group_main(request, pk):
    context= {
        <strong>'groupdetail'</strong>: get_object_or_404(GroupDetail, group__pk=pk)
    }
    return render(request,'group/grouptimeline.html',context)

此外,您正在使用 Group 对象上不存在的变量渲染 GroupDetail 对象。你应该渲染这些:

<img src="{{ groupdetail<strong>.cover.url</strong> }}" alt="">
<!-- … -->
<h1> {{ groupdetail<strong>.group_name</strong> }} </h1>