2014-09-16 1 views
0

Недавно я начал использовать Django, и я пытаюсь использовать его в качестве инструмента управления конфигурацией для более старого приложения, которое я написал. Итак, я создал приложение в моем проекте Django с именем конфигураций.Как добавить created_by и updated_by пользователя в model.py с помощью внешних ключей в Django 1.7?

Для того, чтобы полностью ответить на мой вопрос выше, есть 2 части вопроса.

Я хочу добавить в проект файл models.py класс для хранения всех значений конфигурации. Кроме того, я хочу сохранить идентификатор пользователя, который добавляет новую запись или обновляет запись как created_by и updated_by. Мне сказали, что кто-то, чтобы сделать следующее:

«Вы должны установить несколько иностранных ключевых полей в модели (например, создание и обновления), который, как ссылка на auth.user Затем возьмите request.user в нужное время и сделать <model>.created = request.user. и <model>.updated = request.user перед сохранением. "

  1. Как правильно добавить два внешних ключа к моей модели?

Я попытался завершить 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" 

Сообщение об ошибке показывает:

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 

Часть 2 Как захватить request.user в нужное время и не .created = request.user и .updated = request.user непосредственно перед экономия?

+1

смотрит на это http://stackoverflow.com/a/1142473/2169114. Это ваше дело. –

ответ

7

Django создает обратное отношение от пользователя к вашей модели. в вашем случае оба соотношения имеющих одинаковые и обратная связь

код изменения, как это:

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

Это похоже на компиляцию, можете ли вы объяснить мне, почему это работает, а другой синтаксис не работает? – pitchblack408

+1

Вот почему http://stackoverflow.com/a/2642645/3802821 – morinx

Смежные вопросы