我有两个模型,
class Course(models.Model):
#bunch of fields
students = models.ManyToManyField(Student)
class Student(models.Model):
#bunch of fields
现在,我没有在课程管理屏幕中使用“常规”m2m 小部件,而是在 CourseAdminForm 中添加了一个文件上传字段,以上传一个带有学生 ID 的文本文件。我在 CourseAdmin.save_model 方法中处理文件,遍历学生列表,例如
def save_model(self, request, obj, form, change):
#some other stuff
#...
obj.save()
#obtain student_ids from uploaded file
#...
for id in student_ids:
s = Student.objects.get(pk=id)
course.students.add(s)
obj.save() #not sure this second one is needed
事实证明,这不起作用:m2m 关系没有保存。根据我的阅读,我理解这是因为整个 save_model 方法发生在事务中,并且在提交后,m2m 关系被清除并再次保存,如果它们来自 m2m 小部件。因此,我的问题是我需要手动操纵这些关系,而我只是找不到一种方法(或一个地方)来做到这一点。
因此,问题是:我如何才能实现以编程方式添加这些 m2m 关系的预期结果?