如何在 Django 1.7 中通过外键将 created_by 和 updated_by 用户添加到 model.py? [复制]

Posted

技术标签:

【中文标题】如何在 Django 1.7 中通过外键将 created_by 和 updated_by 用户添加到 model.py? [复制]【英文标题】:How to add created_by and updated_by user to model.py by Foreign Keys in Django 1.7? [duplicate] 【发布时间】:2014-11-10 16:16:35 【问题描述】:

我最近开始使用 Django,并尝试将它用作我编写的旧应用程序的配置管理工具。因此,我在我的 Django 项目中创建了一个名为 configurations 的应用程序。

为了完全回答我上面的问题,问题分为两部分。

我想在项目的models.py 文件中添加一个类来存储所有配置值。另外,我想将添加新记录或更新记录的用户标识存储为created_byupdated_by。有人告诉我要执行以下操作:

“你需要在你的模型中建立几个外键字段(例如创建和更新),它们都链接到auth.user。然后在适当的时候抓住request.user并做<model>.created = request.user<model>.updated = request.user保存之前。”

    如何正确地将两个外键添加到我的模型中?

我尝试完成他告诉我完成的第一步,即在我的models.py 文件中创建外键字段,这些字段分配给created_byupdated_by。但是当我尝试下面的代码时,我得到了一个错误。

from django.db import models
from django.contrib.auth.models import User

class GeneralConfiguration(models.Model):

    updated_by=models.ForeignKey(User)
    created_by=models.ForeignKey(User)
    created_timestamp=models.DateTimeField(auto_now_add=True, auto_now=False)
    updated_timestamp=models.DateTimeField(auto_now_add=True, auto_now=False)

    def __unicode__(self):
        return "General Configuration"

错误信息显示:

jython manage.py makemigrations

←[31;1mCommandError: System check identified some issues:

ERRORS:
←[31;1mconfigurations.GeneralConfiguration.created_by: (fields.E304) Reverse acc
essor for 'GeneralConfiguration.created_by' ***es with reverse accessor for 'G
eneralConfiguration.updated_by'.
        HINT: Add or change a related_name argument to the definition for 'Gener
alConfiguration.created_by' or 'GeneralConfiguration.updated_by'.←[0m
←[31;1mconfigurations.GeneralConfiguration.updated_by: (fields.E304) Reverse acc
essor for 'GeneralConfiguration.updated_by' ***es with reverse accessor for 'G
eneralConfiguration.created_by'.
        HINT: Add or change a related_name argument to the definition for 'Gener
alConfiguration.updated_by' or 'GeneralConfiguration.created_by'.←[0m
←[0m

第 2 部分 如何在适当的时间获取 request.user 并在保存之前执行 .created = request.user 和 .updated = request.user?

【问题讨论】:

看看这个***.com/a/1142473/2169114。这是你的情况。 【参考方案1】:

Django 创建从用户到模型的反向关系。在您的情况下,两种关系具有相同的反向关系

像这样更改代码:

updated_by=models.ForeignKey(User, related_name='updated_by_user')
created_by=models.ForeignKey(User, related_name='created_by_user')

【讨论】:

这似乎可以编译,你能解释一下为什么这行得通而其他语法不起作用吗? 这就是原因***.com/a/2642645/3802821

以上是关于如何在 Django 1.7 中通过外键将 created_by 和 updated_by 用户添加到 model.py? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

具有默认值的外键上的 Django 1.7 迁移错误

数据库中的外键

如何构建我们的 django 模型

Django 1.7 内置迁移与南迁移?

Swift 4 通过外键将数组映射到字典

如何在 Django 中支持使用多封电子邮件的用户?