2017-03-18 4 views
0

Ich bin neu bei Django und möchte wissen, wie ich die E-Mail des Lehrers speichern kann, wenn sich der Lehrer mit der unten gezeigten LoginFormView anmeldet. Nachdem sich der Lehrer angemeldet hat, kann er mithilfe von CreateClassForm eine Klasse erstellen.Django Daten von einem anderen Formular abrufen

Ich habe Probleme beim Speichern von ClassTeacherTeaches-Modell in der Datenbank unter CreateClassForm, wenn der Lehrer eine neue Klasse erstellt. Wie kann ich die E-Mail des Lehrers von LoginFormView abrufen und die E-Mail-Adresse des Lehrers speichern und die automatisch inkrementierte Klassen-ID (diese wird erstellt, sobald der Lehrer eine neue Klasse erstellt) in die ClassTeacherTeaches-Modelldatenbank aufnehmen?

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

Antwort

2

Sie nicht "aus dem Anmeldeformular des Lehrers E-Mail abrufen". Der Lehrer ist angemeldet; Daher rufen Sie die E-Mail von dem angemeldeten Benutzer ab.

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 

Hinweis, macht es keinen Sinn, dieses Feld zu nennen teacher_email; Es zeigt auf das gesamte Benutzermodell, so dass es nur teacher genannt werden sollte.

1

Ich stimme mit Daniels Antwort überein, möchte aber hier eine bessere Richtung geben. Welcher Klasse das Klassenmodell von ForeignKey mit Ihren Benutzern verknüpft ist. Auf diese Weise können Sie Ihre Klassen mit Benutzern in Beziehung setzen und haben daher einen Zeiger auf den Benutzer, der die Klasse erstellt hat.

Bitte lesen Sie django Dokumentation zu diesem Thema:

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

Verwandte Themen