0
我正在运行djando 1.8,我试图保存当前登录的用户在我的数据库中的字段创建和修改。我已经尝试了许多不同的组合,让这个工作,但我没有碰到任何运气。我必须将代码与硬编码工作的用户ID如下:Django模型保存创建和修改
@python_2_unicode_compatible # only if you need to support Python 2
class Project(models.Model):
name = models.CharField(max_length=50, verbose_name="Name")
jobNumber = models.CharField(max_length=8)
shopOut = models.DateTimeField(null=True)
shopIn = models.DateTimeField(null=True)
completion = models.DateTimeField(null=True)
installation_date = models.DateTimeField(null=True)
contractor = models.ForeignKey(Contractor, on_delete=models.CASCADE, default=101)
created_by = models.ForeignKey(User, related_name='Project_created_by')
created_date = models.DateTimeField(auto_now_add=True)
modified_by = models.ForeignKey(User, related_name='Project_modified_by')
modified_date = models.DateTimeField(auto_now=True)
assigned_to = models.ForeignKey(User, related_name='Project_assigned_to', default=1)
status = models.ForeignKey('Status', related_name='Project_status', default=1)
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if not self.id:
self.created_by = User.objects.get(id=1)
#self.created_by = User.objects.get(id=kwargs['request'].user)
#self.created_by = User.objects.get(id=request.user)
self.modified_by = User.objects.get(id=1)
#self.modified_by = User.objects.get(id=kwargs['request'].user)
#self.modified_by = User.objects.get(id=request.user)
super(Project, self).save(*args, **kwargs)
year = datetime.datetime.now().year
self.jobNumber = '{}{:04d}'.format(year, self.id)
self.modified_by = User.objects.get(id=1)
#self.modified_by = User.objects.get(id=kwargs['request'].user)
#self.modified_by = User.objects.get(id=request.user)
super(Project, self).save(*args, **kwargs)
如果我尝试任何注释掉的代码:
self.created_by = User.objects.get(id=kwargs['request'].user)
或
self.created_by = User.objects.get(id=request.user)
我得到的以下错误:
KeyError at /admin/project/project/add/ 'request'
或
NameError at /admin/project/project/add/ global name 'request' is not defined
再次我的问题是我如何保存当前登录的用户在我CREATED_BY和modified_by领域?
任何帮助将不胜感激!
您正在查找的地方没有可用的请求对象。你需要在视图函数/类中才能访问'request'。此外,可以在请求的上下文之外修改模型(例如,在shell中,从信号中),所以无论何时调用save(),都有一个请求和一个登录用户。 – solarissmoke
另请注意,Django管理员已经保存了通过管理员进行的模型更改的历史记录(每个模型都有一个“历史记录”视图)。 – solarissmoke