2017-03-18 19 views
0

私はDjangoを初めて使いました。先生が下のLoginFormViewでログインすると、教師のメールを保存する方法を知りたいと思います。教師がログインした後、CreateClassFormを使用してクラスを作成できます。Djangoは別のフォームからデータを取得します

教師が新しいクラスを作成するときに、CreateClassFormの下にClassTeacherTeachesモデルをデータベースに格納しようとすると問題が発生します。 LoginFormViewから教師の電子メールを取得し、教師の電子メールを保存し、ClassTeacherTeachesモデルデータベースに自動増分クラスID(先生が新しいクラスを作成すると作成される)を取得するにはどうすればいいですか?

models.py

class User(AbstractBaseUser): 
    email = models.EmailField(max_length=100, primary_key=True) 
    password = models.CharField(max_length=100, null=False) 
    full_name = models.CharField(max_length=100, default="", null=False) 
    USERNAME_FIELD = 'email' 

    def get_full_name(self): 
     return self.full_name 

    def set_full_name(self, fname): 
     self.full_name = fname 

    def get_short_name(self): 
     pass 

    def get_full_name(self): 
     pass 

class Class(models.Model): 
    classid = models.AutoField(primary_key=True) 
    class_name = models.CharField(max_length=100, null=False) 


class ClassTeacherTeaches(models.Model): 
    class Meta: 
     unique_together = (('classid', 'teacher_email'),) 

    classid = models.ForeignKey(Class) 
    teacher_email = models.ForeignKey(User) 

form.py

class CreateClassForm(forms.Form): 
     class_name = forms.CharField(widget=forms.widgets.TextInput(attrs={'placeholder': 'Module Code'}), label='') 

     class Meta: 
      model = Class 
      fields = ['class_name'] 

     def save(self, commit=True): 
      data = self.cleaned_data 
      module = Class(class_name=data['class_name']) 

      if commit: 
       module.save() 
      return module 

    class LoginFormView(FormView): 
      form_class = LoginForm 
      template_name = 'App/index.html' 
      success_url = '/' 

      def post(self, request, *args, **kwargs): 
       login_form = self.form_class(request.POST) 
       register_form = RegistrationForm() 
       if login_form.is_valid(): 
        auth = EmailAuthBackend() 
        user = auth.authenticate(email=request.POST['email'], password=request.POST['password']) 
        if user is not None: 

         django_login(request, user) 
         return HttpResponseRedirect("../instructormodule") 

       else: 
        return self.render_to_response(
         self.get_context_data(
          login_form=login_form, 
          register_form=register_form 
         ) 
        ) 

答えて

2

あなたは、 "ログインフォームから教師のメールを取得" しません。先生はでログインしました;したがって、ログインしたuesrから電子メールを取得します。

class CreateClassForm(forms.Form): 
    ... 
    def save(self, commit=True): 
     data = self.cleaned_data 
     module = Class(class_name=data['class_name']) 
     module.teacher_email = self.request.user 

     if commit: 
      module.save() 
     return module 

注意、それはその場teacher_emailを呼び出すことも意味がありません。 Userモデル全体を指しているので、ちょうどteacherと呼ぶべきです。

1

私はDanielの答えに同意しますが、ここでより良い方向を示したいと思います。あなたのクラスモデルがForeignKeyによってあなたのユーザーにリンクされているもの。このようにして、クラスをユーザーに関連付けることができます。したがって、クラスを作成したユーザーを指し示すポインタが表示されます。

この上でDjangoのドキュメントをお読みください:

https://docs.djangoproject.com/en/1.10/topics/db/examples/many_to_one/

関連する問題