我正在使用自定义的CreateView(CourseCreate)和UpdateView(CourseUpdate)保存和更新一个Course。我希望在保存Course时执行一个操作。我将创建一个新的多对多关系,将新课程的讲师与用户之间建立联系(如果还不存在)。因此,我想将Course保存为course,然后使用course.faculty来创建该新关系。最好的实现位置在哪里?
我试图在视图中的form_valid中完成这个操作,但是在CourseCreate中尝试访问form.instance.faculty会出现错误,因为course还没有被创建(在CourseCreate中)。错误信息如下所示:“Course:…”需要在使用此多对多关系之前为字段“course”设置值。在CourseUpdate中也无法工作。Assists关系未被创建。我应该在表单中进行尝试吗?但我不确定如何将用户信息传递给表单。谢谢。
models.py
我试图在视图中的form_valid中完成这个操作,但是在CourseCreate中尝试访问form.instance.faculty会出现错误,因为course还没有被创建(在CourseCreate中)。错误信息如下所示:“Course:…”需要在使用此多对多关系之前为字段“course”设置值。在CourseUpdate中也无法工作。Assists关系未被创建。我应该在表单中进行尝试吗?但我不确定如何将用户信息传递给表单。谢谢。
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)
视图.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)
my_course = form.instance
替换为my_course = form.save(commit=False)
。 - Vingtoft