Я не уверен, что моделирование Enrollment
имеет здесь большой смысл, поскольку в основном вы здесь создаете дополнительную таблицу. Было бы более разумно видеть Enrollment
себя как отношение «многие ко многим» между Course
и User
, например:
from django.contrib.auth import <b>get_user_model</b>
class Course(models.Model):
title = models.CharField(max_length=255)
description = models.TextField()
created_dt = models.DateTimeField(auto_now_add=True)
<b>enrollment = models.ManyToManyField(get_user_model())</b>
def __str__(self):
return self.title
Если позднее вы захотите указать некоторые дополнительные свойства для набора (курс, пользователь), вы можете указать параметр through
[Django-doc] .
Затем мы можем получить список курсов:
@login_required
def course_list(request):
<b>courses = Course.objects.filter(enrollment=request.user)</b>
return render(request,"courses/course_list.html", {'courses':courses})
Если вы продолжаете использовать оригинальное моделирование, мы можем отфильтровать с помощью:
@login_required
def course_list(request):
<b>courses = Course.objects.filter(enrollment__student=request.user)</b>
return render(request,"courses/course_list.html", {'courses':courses})
но это моделирование делает вещи немного "слишком сложными".
Примечание : если вы ссылаетесь на модель пользователя, рекомендуется использовать get_user_model
[Django-doc] вместо User
напрямую, так как если вы позже внедрите пользовательскую модель клиента, вам будет сложно все изменить.