Как предоставить доступ к разным объектам модели разным пользователям в 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, чтобы узнать, как можно сделать запрос, чтобы получить всех студентов на курсе или получить все курсы, которые есть у студента.