小编典典

Django:在模型保存中获取当前用户

python

我想通过models.py方法获取当前登录的用户(request.usersave。我想检查用户的角色,并查看它是否可以根据其角色执行某些操作。

models.py

class TimeSheet(models.Model):
    check_in_time = models.TimeField()
    check_out_time = models.TimeField()

class Tasks(models.Model):
    time_sheet = models.ForeignKey(TimeSheet)
    project = models.ForeignKey(Project)
    start_time = models.TimeField()
    end_time = models.TimeField()

    def save(self, *args,**kwargs):
        project = SpentTime.objects.get(project__project__id = self.project.id)
        start = datetime.datetime.strptime(str(self.start_time), '%H:%M:%S')
        end = datetime.datetime.strptime(str(self.end_time), '%H:%M:%S')
        time = float("{0:.2f}".format((end - start).seconds/3600.0))

        if common.isDesigner(request.user):
            SpentTime.objects.filter(project__project__id = self.project.id).update(design = float(project.design) + time)

        if common.isDeveloper(request.user):
            SpentTime.objects.filter(project__project__id = self.project.id).update(develop = float(project.develop) + time)

        super(Tasks, self).save(*args, **kwargs)

在这里,该Tasks模型被用作Timesheet模型中的内联。我想检查当前登录用户的角色,并根据用户角色更新另一个模型。在这里,我需要request.user检查当前用户的角色。我没有使用任何形式或模板,而是完全利用了Django
admin。是否有任何方法可以进入request.usersave方法或检查并更新admin.py中另一个模型中的值?


阅读 134

收藏
2020-12-20

共1个答案

小编典典

您可以从另一个角度解决这个问题。不应更改模型的save方法,而应覆盖AdminSitessave_model方法。如您所指出的,您将在其中拥有请求对象,并可以访问登录的用户数据。

看看文档的这一章:Django
ModelAdmin文档save_model

2020-12-20