2

我想在 .save() 之前和之后比较一个字段(manytomany),以了解哪些条目已被删除。我试过了:

def save(self):
    differentiate_before_subscribed = Course.objects.get(id=self.id).subscribed.all()
    super(Course, self).save()  # Call the "real" save() method.
    differentiate_after_subscribed = Course.objects.get(id=self.id).subscribed.all()
        #Something

但是 distinct_before_subscribed 和 distinct_after_subscribed 具有相同的值。我必须使用信号?如何?

编辑 :

def addstudents(request, Course_id):
    editedcourse = Course.objects.get(id=Course_id)  # (The ID is in URL)

    # Use the model AssSubscribedForm
    form = AddSubscribedForm(instance=editedcourse)

    # Test if its a POST request
    if request.method == 'POST':
        # Assign to form all fields of the POST request
        form = AddSubscribedForm(request.POST, instance=editedcourse)
        if form.is_valid():
            # Save the course
            request = form.save()

            return redirect('Penelope.views.detailcourse', Course_id=Course_id)
    # Call the .html with informations to insert
   return render(request, 'addstudents.html', locals())

# The course model.
class Course(models.Model):
    subscribed = models.ManyToManyField(User, related_name='course_list', blank=True, null=True, limit_choices_to={'userprofile__status': 'student'})
4

1 回答 1

2

保存模型表单时,首先保存实例,然后save_m2m单独调用该方法(save_m2m除非您使用 保存表单,否则会自动commit=False调用,在这种情况下您必须手动调用它)。对于两个查询集,您会得到相同的结果,因为稍后会保存多对多字段。

您可以尝试使用m2m_changed信号来跟踪多对多字段的更改。

初步建议(无效):

Django查询集是惰性的。在这种情况下,第一个查询集直到模型保存后才被评估,因此它返回与第二个查询集相同的结果。

您可以使用 强制评估查询集list

differentiate_before_subscribed = list(Course.objects.get(id=self.id).subscribed.all())
于 2012-07-26T21:54:12.177 回答