Как предоставить доступ к объекту модели определенному пользователю в Django
Я делаю проект онлайн класса на Django, где я создал модель под названием create_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)
views.py
def teacher_view(request, *args, **kwargs):
form = add_course(request.POST or None)
context = {}
if form.is_valid():
form.save()
return HttpResponse("Class Created Sucessfully")
context['add_courses'] = form
return render(request, 'teacherview.html', context)
forms.py
from django import forms
from .models import course
class add_course(forms.ModelForm):
class Meta:
model = course
fields = ('course_name', 'course_id', 'course_sec', 'classroom_id')
Добавьте еще одно поле в модель курса, которое устанавливает связь с моделью User. Таким образом, вы можете получить подробную информацию о преподавателе, который создал курс.
from django.contrib.auth.models import User
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 teacher_view(request, *args, **kwargs):
# since this is course specific view, you will be passing an identiier or pk of the course as an argument to this function.
course_obj = Course.objects.get(id="identifier")
if request.user == course_obj.created_by:
# logged in user is same as the creator of the course
else:
# redirect
Я бы предпочел создавать разрешения и располагать их в определенных моделях. Вы можете попробовать и с этим. Дайте мне знать, если это не сработает.