Моя форма:
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
Моя модель класса
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)
Когда я сохраняю форму, в базе данных поле modified
имеет идентификатор 1, а не идентификатор 5, который является идентификатором текущего пользователя в пользовательской таблице. Таким образом, метод сохранения в модели не получает request
, но запрос передается методу сохранения формы, который я протестировал .... вывод инструкции 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
Обновлено 2 **
Я просто поместил несколько операторов print в метод сохранения модели и обнаружил, что к нему обращаются 3 раза. 1-й и 2-й вызов содержат запрос, а третий - нет. Таким образом, 1-й 2-кратный правильный идентификатор пользователя сохраняется, а 3-й вызов стирает его снова. Я понимаю, почему на него поступают 2 звонка, но почему идет третий звонок?
Что я здесь не так делаю?
Thx