I would like to create 2 groups (Professors, Students). And I would like to restrict students from creating and deleting Courses.
views.py:
def is_professor(function=None):
def _is_professor(u):
if user.groups.filter(name='Professor').exists():
return True
else:
raise HttpResponseForbidden
return _is_professor(function)
class ListCourseView(ListView):
model = Course
template_name = 'course_list.html'
fields = '__all__'
@is_professor
class CreateCourseView(CreateView):
def get_queryset(self, request):
if not request.user.is_superuser:
return False
model = Course
template_name = 'course/edit_course.html'
fields = '__all__'
def get_success_url(self):
return reverse('courses-list')
def get_context_data(self, **kwargs):
context = super(CreateCourseView, self).get_context_data(**kwargs)
context['action'] = reverse('courses-new')
return context
class UpdateCourseView(UpdateView):
model = Course
template_name = 'course/edit_course.html'
fields = '__all__'
def get_success_url(self):
return reverse('courses-list')
def get_context_data(self, **kwargs):
context = super(UpdateCourseView, self).get_context_data(**kwargs)
context['action'] = reverse('courses-edit',
kwargs={'pk': self.get_object().id})
return context
class DeleteCourseView(DeleteView):
model = Course
template_name = 'course/delete_course.html'
def get_success_url(self):
return reverse('courses-list')
models.py
class Course(models.Model):
name = models.CharField(
max_length=255,
)
def __str__(self):
return ' '.join([
self.name
])
class UserProfile(models.Model):
user = models.OneToOneField(User)
picture = models.ImageField(upload_to='profile_images', blank=True)
class Meta:
permissions = ( ('add_course', 'Add course'), )
def __unicode__(self):
return self.user.username
This is what I tried. First of all I get an error
NameError: global name 'user' is not defined.
And secondly I still don't think this would work :)