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

pit*_*408 0 django django-models django-users

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

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

我想models.py在项目中添加一个类来存储所有配置值.另外,我想存储,增加了一个新的记录或更新记录的用户ID created_byupdated_by.有人告诉我,我做了以下事情:

"你需要在模型中建立几个外键字段(例如创建和更新),这两个字段都链接到auth.user.然后request.user在适当的时候抓住<model>.created = request.user<model>.updated = request.user在保存之前进行操作."

  1. 如何正确地为模型添加两个外键?

我试图完成他告诉我完成的第一步,即在我的models.py文件中创建分配给created_by和的外键字段updated_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"
Run Code Online (Sandbox Code Playgroud)

错误消息显示:

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' clashes 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' clashes 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
Run Code Online (Sandbox Code Playgroud)

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

Has*_*ani 7

Django创建了一个从用户回到模型的反向关系.在你的情况下,两个关系都有相同的反向关系

像这样改变代码:

updated_by=models.ForeignKey(User, related_name='updated_by_user')
created_by=models.ForeignKey(User, related_name='created_by_user')
Run Code Online (Sandbox Code Playgroud)