Django中profile.html展示全部客户 如何仅获取当前已登录客户数据
问题解决步骤
当前问题根因为视图默认查询了全量客户数据,未过滤当前登录用户对应的条目,按以下步骤修改即可:
1. 调整模型关联(未关联Django用户系统时需要)
修改models.py,给Customer模型添加和Django默认用户表的关联字段:
from django.contrib.auth.models import User from django.db import models class Customer(models.Model): # 原有字段全部保留 first_name = models.CharField(max_length=50) last_name = models.TextField(max_length=50) phone = models.CharField(max_length=15) email = models.EmailField(max_length=100 ,default='') password = models.CharField(max_length=500) # 新增一对一关联字段 user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='customer_profile')
修改完成后执行python manage.py makemigrations、python manage.py migrate完成数据库迁移。如果你的项目已经将Customer设置为自定义认证用户模型,可跳过本步骤。
2. 重写profile视图逻辑
修改views.py代码,先校验用户登录状态,再过滤获取当前用户对应的客户数据:
from django.contrib.auth.decorators import login_required @login_required def profile(request): # 仅查询当前登录用户关联的Customer数据 # 如果Customer是自定义认证模型,直接写data = request.user即可 data = Customer.objects.filter(user=request.user).first() return render(request,'profile.html' ,{'data':data})
3. 简化模板渲染逻辑
现在返回的data是单个客户对象,不需要循环遍历,修改profile.html代码:
{% if data %} <h2>{{ data.email }}</h2> <!-- 其余需要展示的字段直接用{{ data.字段名 }}调用即可 --> {% endif %}
内容的提问来源于stack exchange,提问作者ramnath
相关产品推荐
相关产品推荐

