Assign Foreign Key Value after creating ( Logged In User )

喜你入骨 提交于 2020-01-06 06:32:09

问题


I have a createview using CBV

class StudentCreate(LoginRequiredMixin, CreateView):

    login_url = '/signin/'
    model = Student
    fields = ['first_name', 'last_name' ]
    success_url = '/dashboard/'

Respective models.py

class Class_teacher(models.Model):

    first_name = models.CharField(max_length=200)
    last_name = models.CharField(max_length=200)
    standard = models.IntegerField()
    division = models.CharField(max_length=1)
    subject = models.CharField(max_length=200)
    email = models.CharField(max_length=30)


class Student(models.Model):

    first_name = models.CharField(max_length=200)
    last_name = models.CharField(max_length=200)
    classteacher = models.ForeignKey('Class_teacher', on_delete=models.SET_NULL,blank=True, null=True )

The webapp has a login feature . When the user ( classteacher ) login they can add students. What I want is classteacher field in Student(model Form ) should be automatically set as user which is the classteacher. ( Classteacher ) and should be saved in the db after creating the student. Classteacher model is updated with respective required fields .


回答1:


Look here for the various methods of a CreateView that you can override.

In your case, you want to override the form_valid() method, which is called when the new Student will be saved.

from django.shortcuts import get_object_or_404

def form_valid(self, form):
    self.object = form.save(commit=False)
    self.object.classteacher = get_object_or_404(Class_teacher, email=self.request.user.email)
    self.object.save()
    return super().form_valid(form)



回答2:


You need to define your own form_valid(). I assume the Teacher as a one to one Relationship with your User model.

def form_valid(self, form):
    student = form.save(commit=False)
    #retrieve the current logged_in teacher, of course you have to be sure this view is only accesible for teachers (in dispatch for exemple)
    self.object.classteacher = self.request.user.teacher
    self.object.save()
    return super(StudentCreate, self).form_vaild(form)

#bonus the dispatch
def dispatch(self, request, *args, **kwargs):
        #get the loged in user
        if request.user.teacher:
            return super(StudentCreate, self).dispatch(request, *args, **kwargs)
        else:
            raise Http404


来源:https://stackoverflow.com/questions/55899282/assign-foreign-key-value-after-creating-logged-in-user

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!