django - 检查Django的ManyToManyField中是否存在用户类型?
问题描述
我有一个课程模型,其中包含一个创建课程的用户并包含一个enrolled
ManyToManyField,它允许用户注册课程。
class Course(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='course_owner')
enrolled = models.ManyToManyField(User)
...
用户模型包含两种类型 - 教师(创建课程)和学生(注册)
class User(AbstractUser):
is_student = models.BooleanField(default=True)
is_teacher = models.BooleanField(default=False)
我想要一个 MyCourses 视图,教师可以在其中查看他的 created_courses,学生可以查看他注册的课程。
def MyCourses(request):
user = request.user
courses = Course.objects.filter(user=user)
context = {
'courses': courses
}
return render(request, 'classroom/mycourses.html', context)
这适用于教师部分,但我如何检查学生是否注册了该课程?
谢谢。
解决方案
您可以添加额外条件并使用逻辑或:
from django.db.models import Q
def MyCourses(request):
user = request.user
courses = Course.objects.filter(Q(user=user) | Q(enrolled=user))
context = {
'courses': courses
}
return render(request, 'classroom/mycourses.html', context)
为防止Course
多次加载相同的内容,您可以使用.distinct()
[Django-doc]:
from django.db.models import Q
def MyCourses(request):
user = request.user
courses = Course.objects.filter(Q(user=user) | Q(enrolled=user)).distinct()
context = {
'courses': courses
}
return render(request, 'classroom/mycourses.html', context)
推荐阅读
- java - Docusign java 集成出现错误“http://java.sun.com/jsp/jstl/core 无法解决”
- firebase - 使用 Firebase 多个站点和 Firebase 身份验证,是否可以在一个站点上登录并在另一个站点上保持身份验证?
- php - 如何制作这样的数组
- javascript - 阻止具有源“file://”的框架访问跨域框架
- java - Firebase - 检查 uid 子值是否在 Posts 节点中匹配,如果匹配,则将所有得分值相加并存储在 String 变量中
- c++ - c++ 中的强制转换是什么时候发生的,编译时间还是运行时间?
- typescript - array.sort(),可以不声明 0 值吗?
- javascript - 通过 Div id 生成画布图像
- c# - 如何将C#数据表传递给mysql的存储过程参数
- cakephp-3.0 - 如何设置别名而不是 id ,我需要 category_id 而不使用 forloop