0

django-simple-history用来维护我的模型更改的历史记录。

我正在尝试使用此处建议的方式关联用户更改服务对象

模型.py

class UserTrackMixin(models.Model):

    changed_by = models.ForeignKey(User, null=True, on_delete=models.DO_NOTHING)

    @property
    def _history_user(self):
        return self.changed_by

    @_history_user.setter
    def _history_user(self, value):
        self.changed_by = value

    class Meta:
        abstract = True


class Service(BaseModel, UserTrackMixin):
    name = models.CharField(max_length=200)
    serviceType = models.CharField(max_length=200)

    history = HistoricalRecords()

但是,当我尝试将用户对象分配_history_user给服务对象的属性时,它会给出如下所述的错误。

u1=User.objects.first()
<User: User object (07ab8565-26c7-4bfa-a92e-e12bf924160a)>
s._history_user = u1
s.save()

ValueError: Cannot assign "<User: User object (07ab8565-26c7-4bfa-a92e-e12bf924160a)>": "HistoricalService.history_user" must be a "User" instance.

然后我尝试了这个:

s.changed_by = u1
s.save()

这也给出了同样的错误。

u1是用户实例,那为什么会出现这个错误?

4

2 回答 2

1

_history_userdjango-simple-history内部使用,您不必调用它(因此 _ 作为函数的前缀)

改用changed_by

u1 = User.objects.first()
s.changed_by = u1
s.save()
于 2020-03-07T18:50:35.873 回答
0

问题出在我的代码上。

我没有AUTH_USER_MODEL在设置文件中定义变量,因为历史假定'auth.User'为默认用户,正如可以在此处看到的那样,这不是我正在使用的用户模型,因为我已经定义了我的自定义用户模型。

因此,我需要明确提及我用于用户跟踪的用户模型。

最终代码:

    @property
    def _history_user(self):
        return self.changed_by

    @_history_user.setter
    def _history_user(self, value):
        self.changed_by = value

    history = HistoricalRecords(user_model=User)
于 2020-03-08T11:29:57.570 回答