Django CreateView: Comment faire pour effectuer une action sur enregistrer

Je suis en utilisant une mesure CreateView (CourseCreate) et UpdateView (CourseUpdate) la sauvegarde et la mise à jour d'un Cours. Je veux prendre une action lorsque le Cours est enregistré. Je vais créer une nouvelle plusieurs-à-plusieurs relation entre le formateur des nouveaux cours et de l'utilisateur (si elle n'existe pas déjà).

Donc, je veux sauver le Cours comme cours, et ensuite utiliser bien sûr.faculté de créer cette nouvelle relation. Où est le meilleur endroit pour ce faire?

Je suis en train de le faire dans form_valid dans les points de vue, mais j'ai des erreurs lorsque vous essayez d'accéder à un formulaire.exemple.faculté bc le parcours n'est pas encore créé (dans CourseCreate). Le message d'erreur est semblable:

"Cours: ..." doit avoir une valeur pour le champ "cours" avant cela, plusieurs-à-plusieurs relations peuvent être utilisés.

C'est aussi ne fonctionne pas dans CourseUpdate. L'Aide de la relation n'est pas créé. Devrais-je essayer ce dans le Formulaire? Mais je ne suis pas sûr de savoir comment obtenir les infos de l'utilisateur vers le Formulaire.
Merci.

models.py

class Faculty(models.Model):
    last_name = models.CharField(max_length=20)

class Course(models.Model):
    class_title = models.CharField(max_length=120)
    faculty = models.ManyToManyField(Faculty)

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    faculty = models.ManyToManyField(Faculty, through='Assists')

class Assists(models.Model):
    user = models.ForeignKey(UserProfile)
    faculty = models.ForeignKey(Faculty)

views.py

class CourseCreate(CreateView):
    model = Course
    template_name = 'mcadb/course_form.html'
    form_class = CourseForm
    def form_valid(self, form):
        my_course = form.instance
        for f in my_course.faculty.all():
            a, created = Assists.objects.get_or_create(user=self.request.user.userprofile, faculty=f)
        return super(CourseCreate, self).form_valid(form)

class CourseUpdate(UpdateView):
    model = Course
    form_class = CourseForm
    def form_valid(self, form):
        my_course = form.instance
        for f in my_course.faculty.all():
            a, created = Assists.objects.get_or_create(user=self.request.user.userprofile, faculty=f)
        return super(CourseUpdate, self).form_valid(form)
  • Essayez de remplacer my_course = form.instance avec my_course = form.save(commit=False)
  • je vous remercie. Lorsque j'essaie que, après avoir cliqué sur Enregistrer btn lors de la création d'un nouveau cours, je vois toujours le même message d'erreur:" Le Parcours de l'objet doit avoir une valeur pour le champ "cours" avant cela, plusieurs-à-plusieurs relations peuvent être utilisés." Je n'arrive pas à comprendre d'où le "cours" de mentionner vient de... j'ai une classe nommée Sûr, mais il n'a pas un champ nommé "cours", et mon avis n'a aucune mention d'un "cours".
InformationsquelleAutor Carrie | 2015-10-07