在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
相关产品推荐
相关产品推荐

