Django:表单保存覆盖

3 django

我的表格:

class AssessmentForm(ModelForm):

    def save(self, commit=True, request=None, *args, **kwargs):

        print 'request.user.id:',request.user.id

        instance = super(AssessmentForm, self).save(commit=False)
        if commit:
            instance.save(request=request)
        if request:
            instance.modifier = request.user
            instance.save(request=request)
        return instance

    class Meta:
        model = Assessment
Run Code Online (Sandbox Code Playgroud)

我的模型类

class Assessment(models.Model):
    name = models.CharField(max_length=255, verbose_name="Title")
    review_state = models.CharField(max_length=20,
                                    choices=REVIEW_STATE_CHOICES)
    iteration = models.IntegerField(choices=ITERATION_CHOICES)
    assessment_note = models.TextField(verbose_name="Notes",
                                       blank=True,
                                       null=True)
    .... snip ....
    modifier = models.ForeignKey(User,
                    editable=False,
                    related_name="%(app_label)s_%(class)s_modifier_related")
    modified = models.DateField(editable=False)


    def save(self, request=None, *args, **kwargs):
        if request:
            user = request.user
        else:
            user = User.objects.get(pk=1)
        self.modifier = user
        self.modified = datetime.now()

        if not self.id:
            self.creator = user
            self.created = datetime.now()
        super(Assessment, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

当我保存表单时,在数据库中该modified字段具有id 1而不是id 5,这是用户表中当前用户的id.因此,模型上的save方法没有得到,request但是请求正在进行我已经测试的Form保存方法.... Form保存方法中print语句的输出是:

request.user.id: 5

更新*

class AssessmentForm(ModelForm)我也尝试过:

def save(self, commit=True, request=None, *args, **kwargs):
    print 'request.user.id:',request.user.id
    instance = super(AssessmentForm, self).save(commit=False)
    if commit:
        instance.save(request=request)
    return instance
Run Code Online (Sandbox Code Playgroud)

更新2** 我只是在模型保存方法中放了一些打印语句,我发现有3个调用它.对它的第一次和第二次调用包含请求,但第三次调用不包含.因此保存正确用户ID的前2次,但第3次呼叫再次擦除它.我理解为什么有2个电话,但为什么有第三个电话?

我在这做错了什么?

谢谢

man*_*nji 7

你没有把request对象传递给instance.save()