Как предоставить доступ к разным объектам модели разным пользователям в django

Я делаю проект онлайн класса на Django, где я создал модель под названием курс, которая доступна учителям. Теперь я пытаюсь добавить студентов в определенный класс, приглашая студентов или студенты могут зарегистрироваться, используя "clasroom_id" (уникальное поле, которое я использовал в модели). Я добавил модели и представления объекта курса ниже.

models.py

class course(models.Model):
    course_name = models.CharField(max_length=200)
    course_id = models.CharField(max_length=10)
    course_sec = models.IntegerField()
    classroom_id = models.CharField(max_length=50,unique=True)
    created_by = models.ForeignKey(User,on_delete=models.CASCADE)

    def __str__(self):
        return self.course_name

    def is_valid(self):
        pass

views.py

def teacher_view(request, *args, **kwargs):
    form = add_course(request.POST or None)
    context = {}
    if form.is_valid():
        course = form.save(commit=False)
        course.created_by = request.user
        course.save()
        return HttpResponse("Class Created Sucessfully")
    context['add_courses'] = form
    return render(request, 'teacherview.html', context)

def view_courses(request, *args, **kwargs):
    students = course.objects.filter(created_by=request.user)
    dict = {'course':students}
    return render(request, 'teacherhome.html',dict)

ПРИМЕЧАНИЕ Этот ответ - лишь общая идея подхода.

Вам нужно ManyToManyField между вашей моделью студента/пользователя и моделью курса, поскольку предположительно много студентов могут иметь курс, а курс может иметь много студентов. Вы можете сделать это с помощью модели пользователя, но мне будет проще ответить на вопрос с помощью отдельной модели студента, связанной с моделью пользователя, например:

from django.conf import settings

class Student(models.Model):
    student = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

Это один из способов разделения различных типов пользователей, например, преподавателей и студентов, путем расширения модели пользователя с помощью поля OneToOneField. Вы также можете просто добавить другое поле в вашу модель пользователя, например user_type, если у вас уже есть настроенная модель пользователя.

Теперь перейдем к вашему вопросу. Настройте поле ManyToManyField (обратите внимание, как я пишу имена классов с большой буквы (Course, а не курс):

)
class Course(models.Model):
    course_name = models.CharField(max_length=200)
    course_id = models.CharField(max_length=10)
    course_sec = models.IntegerField()
    classroom_id = models.CharField(max_length=50,unique=True)
    created_by = models.ForeignKey(User,on_delete=models.CASCADE)
    students = models.ManyToManyField(Student, blank=True)

Теперь самая простая часть. Когда вы хотите добавить студента в курс, все, что вам нужно сделать, это сначала получить курс, запросив classroom_id, а затем добавить в него студента:

student = Student.objects.get(student=request.user)
course = Course.objects.get(classroom_id=request.POST.get('classroom_id'))
course.add(student)

Обратите внимание, что функция add() автоматически сохраняет. Поле ManyToManyField создаст промежуточную таблицу между Students и Courses. Прочитайте docs, чтобы узнать, как можно сделать запрос, чтобы получить всех студентов на курсе или получить все курсы, которые есть у студента.

Вернуться на верх