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个电话,但为什么有第三个电话?
我在这做错了什么?
谢谢