Django实现员工对用户添加多条私有评论的方法咨询
实现Django用户多条私有评论的方案
你当前的User模型(Django模型类名建议首字母大写)把评论直接存在用户表中,导致每个用户只能对应一条评论。要实现员工可为用户添加多条私有评论且仅有权限人员查看的需求,需要调整模型结构,具体方案如下:
1. 拆分模型,创建独立的评论模型
新建一个UserComment模型,和你的User模型建立一对多关联(一个用户对应多条评论),同时增加评论者、评论内容、创建时间等字段,用于记录私有评论的相关信息:
from django.db import models from django.contrib.auth.models import User # 若你的员工用自定义模型,替换成对应类 class User(models.Model): name = models.CharField(max_length=30) # 移除原有的comments和date字段,相关逻辑移至评论模型 def __str__(self): return self.name class UserComment(models.Model): # 关联被评论的用户 user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='comments') # 评论内容 comment_text = models.TextField() # 关联添加评论的员工(假设员工用Django自带用户模型,且拥有staff权限) created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='created_comments') # 自动记录评论创建时间 created_at = models.DateTimeField(auto_now_add=True) def __str__(self): creator = self.created_by.username if self.created_by else 'Unknown' return f"Comment for {self.user.name} by {creator}"
2. 关键细节说明
related_name='comments':允许你通过user.comments.all()快速获取该用户的所有评论created_by字段:记录添加评论的员工,后续可通过此字段实现权限隔离auto_now_add=True:自动设置评论创建时间,无需手动传入参数
3. 权限控制实现
在视图中过滤仅有权限的员工能查看的评论:
- 管理员:可查看所有用户的所有评论
- 普通员工:仅能查看自己创建的评论
示例视图逻辑:
from django.shortcuts import get_object_or_404, render from .models import User, UserComment def user_comments(request, user_id): target_user = get_object_or_404(User, id=user_id) # 根据当前用户权限过滤评论 if request.user.is_superuser: comments = target_user.comments.all() elif request.user.is_staff: comments = target_user.comments.filter(created_by=request.user) else: comments = UserComment.objects.none() return render(request, 'user_comments.html', {'user': target_user, 'comments': comments})
4. 更新数据库
修改模型后,执行迁移命令同步数据库:
python manage.py makemigrations python manage.py migrate
内容的提问来源于stack exchange,提问作者Filippo Genoni
相关产品推荐
相关产品推荐

