You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Django模板中展示用户角色数据的技术问询

问题修正与实现方案

一、模型代码修正

Landlord模型属于User的扩展模型,不需要用户认证相关配置(USERNAME_FIELD、REQUIRED_FIELDS、UserManager),删除冗余代码后:

from django.contrib.auth.models import AbstractUser, BaseUserManager
from django.db import models

class User(AbstractUser):
    is_customer = models.BooleanField(default=False)
    is_employee = models.BooleanField(default=False)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    nin = models.IntegerField(unique=False, null=True)
    avatar = models.ImageField(null=True, default="avatar.svg")
    is_landlord = models.BooleanField(default=False)
    objects = BaseUserManager()
    REQUIRED_FIELDS = []

class Landlord(models.Model):
    user = models.OneToOneField(User, related_name="prop_owner", null=True, on_delete=models.CASCADE)
    bio = models.TextField(null=True)

    def __str__(self):
        return f"{self.user.first_name} {self.user.last_name}"

二、视图代码修正

移除冗余的is_landlord参数,通过房产对象直接关联获取目标房东用户,同时优化数据库查询性能:

def propertySingle(request, pk):
    # 预加载关联的房东和用户,减少查询次数
    property = Property.objects.select_related('landlord__user').get(id=pk)
    # 提取房产对应的房东用户
    landlord_user = property.landlord.user
    properties = Property.objects.all()
    images = Image.objects.filter(property=property)
    
    context = {
        "property": property,
        "properties": properties,
        "images": images,
        "landlord_user": landlord_user,
    }
   
    return render(request, "base/page-listing-single.html", context)

补充说明:确保你的Property模型存在关联Landlord的字段,示例如下:

class Property(models.Model):
    landlord = models.ForeignKey(Landlord, on_delete=models.CASCADE)
    # 其他业务字段...

三、模板代码修正

模板中需展示目标房东用户的信息,而非登录用户(request.user),修正变量引用:

<div class="sl_creator">
    <h4 class="mb25">Property Owned By:</h4>
    <div class="media">
        <img class="mr-3" style="width: 90px; height:90px;" src="{{ landlord_user.avatar.url }}" alt="Landlord Avatar">
        <div class="media-body">
            <h5 class="mt-0 mb0">{{ landlord_user.first_name }} {{ landlord_user.last_name }}</h5>
            <a class="text-thm" href="#">View other Listings by {{ landlord_user.first_name }} {{ landlord_user.last_name }}</a>
        </div>
    </div>
</div>

四、核心逻辑说明

  • 无论登录用户角色是什么,模板都会通过房产关联的Landlord模型,直接获取对应的房东用户信息,确保展示内容准确
  • 使用select_related预加载关联数据,避免N+1查询问题,提升页面加载性能
  • 需确保项目已正确配置MEDIA_URL和MEDIA_ROOT,否则用户头像无法正常显示

内容的提问来源于stack exchange,提问作者Sir Feranmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:03:21