【问题标题】:How to add Foreign Keys to Django Field History?如何将外键添加到 Django 字段历史记录?
【发布时间】:2019-04-01 20:20:12
【问题描述】:

我正在尝试使用 django-field-history 跟踪外键,但是当我添加它时,它会使用模型在每个页面上执行额外的查询

例如

from field_history.tracker import FieldHistoryTracker

class Author(models.Model):
    user = models.ForeignKey('auth.user)
    field_history = FieldHistoryTracker(['user'])

总是会在使用 Author 的页面上提供更多查询,就像这样

SELECT ••• FROM "auth_user" WHERE "auth_user"."id" = '2'
  1239 similar queries.   Duplicated 1235 times.

我尝试在 Field History Tracker 中使用 user_id 而不是 user,但它总是会返回 None。使用 user.id 或类似的东西只会返回错误。

我确实需要保留这些历史数据,但不能以增加数千次查询为代价。

另外,我真的很喜欢保留 django-field-history,因为我的整个数据库都在使用它,但我知道我可能必须切换包,如果是,你会建议哪一个?

【问题讨论】:

    标签: django


    【解决方案1】:

    据我了解,您正在尝试记录哪个用户已更新,为此您应该使用_field_history_user,如documentation 中所述。 例如:

    class Pizza(models.Model):
        name = models.CharField(max_length=255)
        updated_by = models.ForeignKey('auth.User')
    
        field_history = FieldHistoryTracker(['name'])
    
        @property
        def _field_history_user(self):
            return self.updated_by
    

    它总是会更新哪个用户更新了该表的行。

    【讨论】:

    • 也许我的例子不是最好的。我的字段用户不是更新的用户,而是一个可编辑的字段。假设我将我的作者 1 设置为用户 1,然后将其切换到用户 2,然后再切换回用户 3,我想查看我的跟踪器中的所有更改
    猜你喜欢
    • 1970-01-01
    • 2020-10-10
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    相关资源
    最近更新 更多