【问题标题】:Check if a User type exists in ManyToManyField in Django?检查Django的ManyToManyField中是否存在用户类型?
【发布时间】:2021-05-30 21:24:15
【问题描述】:

我有一个课程模型,其中包含一个创建课程的用户,并包含一个 enrolledManyToManyField,它允许用户注册课程。

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)

这适用于教师部分,但我如何检查学生是否注册了课程?

谢谢。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    您可以添加额外的条件并使用逻辑或:

    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)

    【讨论】:

      猜你喜欢
      • 2019-01-17
      • 2013-06-11
      • 2023-03-22
      • 2013-11-29
      • 2017-02-10
      • 2017-10-09
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多