【发布时间】:2016-01-05 01:02:18
【问题描述】:
我正在使用自定义 CreateView (CourseCreate) 和 UpdateView (CourseUpdate) 来保存和更新课程。我想在保存课程时采取行动。我将在新课程的讲师和用户之间创建一个新的多对多关系(如果它不存在的话)。
所以,我想将 Course 保存为 course,然后使用 course.faculty 创建新的关系。实现这一目标的最佳地点在哪里?
我试图在视图中的 form_valid 中执行此操作,但在尝试访问 form.instance.faculty 时出现错误,因为课程尚未创建(在 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)
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)
【问题讨论】:
-
尝试用
my_course = form.save(commit=False)替换my_course = form.instance -
@Vingtoft,谢谢。当我尝试这样做时,在创建新课程时单击 Save btn 时,我仍然看到相同的错误:“在使用这种多对多关系之前,Course 对象需要具有字段‘course’的值。”我不太明白“课程”提及的来源......我确实有一个名为“课程”的课程,但它没有一个名为“课程”的字段,而且我的观点没有提及“课程”。
标签: django