Home > Mobile >  How to track which user is creating object for a model and how to show the object details only to th
How to track which user is creating object for a model and how to show the object details only to th

Time:03-21

I am doing an online classroom project in Django where I created a model named create_course which is accessible by teachers. Now I am trying to design this as the teacher who creates a class only he can see this after login another teacher shouldn't see his classes and how to add students into that particular class I created

the course model

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)

here if I use "the created_by" field in forms it appears to be a drop-down menu where every user is showing but I want to automatically save the user who creates the object

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')

CodePudding user response:

In your view use commit=False to stop the form from saving until you add the created_by field.

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)
  • Related