Вопросы с тегами [django-reversion]

1

голосов
0

ответ
74

Просмотры

как использовать Джанго-реверсии, чтобы сохранить возможные будущие объекты?

Я создаю сайт с Django с помощью Rest Framework, она позволяет пользователям изменять или создавать новые объекты, вроде как Wikipedia, где любой желающий может внести изменения, но он должен пройти через процесс, который будет принят. Я понимаю поведение по умолчанию для управления версий, чтобы сохранить предыдущие изменения, но я хотел бы использовать Django-реверсию или библиотеку, чтобы следить за возможные будущие версии моих моделей. (Пока они не одобрены отдельными пользователями) Дело в том, поведение по умолчанию в Джанго-реверсии является то, что мы должны внести изменения в нашу модель объекта, чтобы создать новую версию, я бы вместо этого хотел бы создать новую версию, а затем, если принято выбранные пользователи, применить изменения к объекту. Мой вопрос: как я могу создавать версии модели без изменения исходного объекта? Я до сих пор убежище» т вполне понять концепцию пересмотра блоков, поэтому я могу задать этот вопрос. Если вы думаете, что есть лучшая альтернатива к моей проблеме, я открыт для предложений Ссылка на Джанго-реверсии репо: https://github.com/etianen/django-reversion
1

голосов
2

ответ
32

Просмотры

Как эффективно получить значение атрибута в данный момент времени в Django реверсии?

Я в настоящее время использую Джанго-реверсии для отслеживания модели счета, который имеет поле total_spent. Сверхурочная это поле обновляется всякий раз, когда счета тратит деньги. Моя цель состоит в том, чтобы получить значение total_spent между X и Y, которые являются оба экземпляра DateTime. Как я могу сделать это эффективно?
Sparrowcide
1

голосов
1

ответ
210

Просмотры

Получение Джанго-mptt играть хорошо с Джанго-реверсии

Я работаю над проектом, который использует Джанго-реверсии для отслеживания изменений и дать возможность вернуться к ранее состояний, и Джанго-mptt для некоторых моделей деревьев в форме. Удалить и восстановить функциональность, однако, есть некоторые фанки поведение. Я работаю с демо-данными, который выглядит примерно так: Big Company Sub Company 1 Sub Company 2 Крошечные Company 1 Крошечные Company 2 Я сфальсифицированы Джанго-реверсии, так что удаление узла также сохраняет все свои подузлы к пересмотру - - так, удаление Big Company удаляет все дерево, а затем возвращаясь его (или на самом деле, любой из вспомогательных узлов) также возвращается целое дерево. Все идет нормально. Вещи начинают получать странно, однако, когда я пытаюсь удалить / восстановить подузлы. Например, удаление 'Sub компании 1' вызывает 'Sub Company 2' и его» ые потомки, чтобы остановить рендеринг в шаблоне (хотя это поведение, причудливо, непоследовательный). Или я должен использовать Джанго-реверсии для восстановления «Sub Company 2» после удаления, ни в «Крошечные компаний» будет оказывать в шаблоне (хотя быстро ныряя в оболочку и вызывая объекты показывает, что они все еще находятся в базе данных, и ., что они до сих пор «Sub Company 2» в качестве родителя Все эти проблемы могут быть решены путем вызова Company.objects.rebuild (), который восстанавливает дерево в надлежащее представительство - но готовый к производству версия этого проекта может иметь много данных в базе данных, и так, что целый стол деятельности это было бы слишком дорого. Любые идеи относительно того, что я мог сделать, чтобы исправить эту проблему? который восстанавливает дерево в надлежащем представительство - но готовая к производству версии этого проекта может иметь много данных в базе данных, и так, что целый стол деятельность это было бы слишком дорого. Любые идеи относительно того, что я мог сделать, чтобы исправить эту проблему? который восстанавливает дерево в надлежащем представительство - но готовая к производству версии этого проекта может иметь много данных в базе данных, и так, что целый стол деятельность это было бы слишком дорого. Любые идеи относительно того, что я мог сделать, чтобы исправить эту проблему?
MBrizzle
1

голосов
1

ответ
255

Просмотры

Могу ли я использовать Джанго реверсии только для администратора или передней части, а также

Я пытаюсь использовать Django реверсии, так что я могу иметь журнал аудита всех изменений, сделанных для всех моделей в переднем конце приложения сделано в угловых JS в качестве переднего конца и Django REST в качестве внутреннего интерфейса. Я имею в виду использование Django реверсии и их документы говорят это https://django-reversion.readthedocs.org/en/latest/how-it-works.html Любые модели, которые используют подклассы VersionAdmin в интерфейсе администратора будет автоматически зарегистрирован с Джанго-реверсии. Таким образом, необходимо только вручную зарегистрировать эти модели, если вы хотите изменить настройки регистрации по умолчанию. Теперь это означает, что я могу использовать только то, что в админ сайта только и не на модели были сохранены с помощью листеца конца.
user3214546
1

голосов
2

ответ
421

Просмотры

split the revision.comment into field and value in Django-reversion

I have a function to display history list of version objects as below and I have this particular .py file in public repo at https://github.com/praneethkumarpidugu/django-reversion/blob/master/rev_history/views.py#L1: from django.http import HttpResponse from reversion.models import Version #from django.contrib.admin.models import LogEntry import json def history_list(request): history_list = Version.objects.all().order_by('-revision__date_created') data = [] for i in history_list: data.append({ 'date_time': str(i.revision.date_created), 'user': str(i.revision.user), 'object': i.object_repr, 'type': i.content_type.name, 'comment': i.revision.comment }) data_ser = json.dumps(data) return HttpResponse(data_ser, content_type="application/json") To change the object entities I visited admin page 127.0.0.1:8000/admin I changed a boolean field for representation say "is_active" from true to false. Now, I come to history page 127.0.0.1:8000/history I see the json data as below: {"type": "model a", "date_time": "2015-03-04 15:58:36.141569+00:00", **"comment": "Changed is_active."**, "object": "ModelA object", "user": "admin1"} Solution likely to have: I want comment to be split as previous_value: "True", "new_value": "False", "field": "is_active". my research driving towards solution I digged into Revision class of reversion/models.py to see if there are any extra arguements to display field and value but to my understanding I'm unable to find the clue where I could find field and values for comment. for reference here is the comment from Revision comment = models.TextField(blank=True, verbose_name=_("comment"), help_text="A text comment on this revision.") solution to represent field : This might look a bit silly but I just hacked into my own data of comment above to represent field as 'field': i.revision.comment.split(' ')[-1] But I still need to get the values of the field which are original and new values after changing.
Praneeth
1

голосов
2

ответ
1.1k

Просмотры

Есть ли способ получить доступ к объекту Джанго-реверсии, как если бы это был текущий объект?

Я использую Django реверсии - есть способ, чтобы временно вновь установить предыдущую версию объекта, так что он может быть просмотрен в DetailView? Non рабочий код - version.get_object () было бы хорошо .. класс ProductDetailView (DetailView): Защиту get_object (Я): OBJ = супер (ProductDetailView, самость) .get_object (), если self.request.GET.get ( 'v' ) не является None: version_id = force_text (self.request.GET.get ( 'v')) версия = get_object_or_404 (версия, рк = version_id, object_id = force_text (obj.pk)) возвращают version.get_object () возвращает OBJ
Guy Bowden
18

голосов
2

ответ
1.4k

Просмотры

Джанго-реверсия и связанная с моделью

get_success_url ()) Но только один из контактов получает ревизию (первая) и комментарий наступающий с ним. Как Revision Контекст менеджер может быть использован для создания ревизии?
TonyEight
2

голосов
1

ответ
305

Просмотры

Как получить предыдущее значение объекта после изменения его имени с помощью Джанго реверсии?

ру о том, как добавить Джанго-реверсии в приложение разработано с использованием Джанго и Джанго-остальные рамки я добавил путь к истории. Когда я посещаю 127.0.0.1:8000/history я получаю данные JSON, как [{ "объект": "SomeObject", "пользователь": "someuseruser", "типа": "SomeType", "комментарий": «измененное имя. »,„дата_время“:„2015-03-02 18: 04: 58,368650 + 00: 00“}] поток выполнения: Когда я посетить 127.0.0.1:8000/admin и изменить значение выше объекта„otherobject“. когда я обновить 127.0.0.1:8000/history. Я получаю еще одно поле JSon [{ "объект": "otherobject", "пользователь": "someuseruser", "типа": "SomeType", "комментарий": "измененное имя.", "DATE_TIME": «2015-03 -02 18: 04: 58,368650 + 00:
Praneeth
5

голосов
2

ответ
557

Просмотры

Как создать первоначальную версию для тестирования объектов при использовании Джанго-реверсии в тесте

Я создаю некоторые начальные тесты, как я играю с Джанго-версиями. Я хотел бы быть в состоянии проверить, что некоторые из моих апи и просматривать код корректно сохраняет изменения. Тем не менее, я не могу получить даже базовый тест, чтобы сохранить удаленную версию. импорт реверсия из django.db импортной операции из теста Джанго импорта из MYAPP импортных моделей класса TestRevisioning (test.TestCase): светильники = [ 'MyModel'] Защита testDelete (Я): object1 = models.MyModel.objects.first () с транзакцией .atomic (): с reversion.create_revision (): object1.delete () self.assertEquals (reversion.get_deleted (models.MyModel) .count (), 1) Это терпит неудачу при проверке длины удаляемой с QuerySet: AssertionError: 0! = 1 Моя гипотеза состоит в том, что мне нужно создать начальные ревизии моей модели (сделать эквивалент ./manage.py createinitialrevisions). Если это вопрос, как создать начальные изменения, в моем тесте? Если это не проблема, что еще я могу попробовать?
dbn
1

голосов
1

ответ
993

Просмотры

Как обеспечить представление для объектов истории Джанго-реверсии?

Администратор интеграции для Джанго реверсии довольно проста. Когда я посещаю 127.0.0.1/admin у меня есть возможность для пользователей персонала для восстановления удаленных объектов или просмотреть предыдущие версии. Но это только со стороны администратора. Как я могу предоставить общественности представление для объектов истории? Я пытаюсь обеспечить доступ истории через Django-REST-Framework.
Praneeth
2

голосов
2

ответ
416

Просмотры

Новая редакция не создается при сохранении модели

Я использую реверсии контролировать изменения в модели объектов. В документации я нашел это: Всякий раз, когда вы звоните сохранить () на модели в пределах объема пересмотра, он будет добавлен к этой ревизии Вот мой код, где я использую модель Сохраним метод: c.save (update_fields = [ 'статус «]) Когда этот код выполняется не новая запись в списке пересмотров объекта, по крайней мере, я не вижу его в админке.
Dmitrii Mikhailov
3

голосов
1

ответ
137

Просмотры

Почему я должен заботиться о операции Джанго-ревизионной быть атомной?

Я хочу, чтобы начать использовать Джанго-реверсии. Это, кажется, самый простой способ заключается в использовании их промежуточное программное обеспечение. Но это дает следующее предупреждение: Внимание: В связи с изменениями в обработке транзакций Django 1.6, данные ревизии будут сохранены в отдельной транзакции базы данных к той, которая используется для сохранения модели, даже если вы установите ATOMIC_REQUESTS = True. Каковы предостережения, если запросы не являются атомарными? Это, кажется, указывает, что могут быть какие-то условия гонки. Как они могут выглядеть? Что мне нужно сделать, чтобы следить за? Спасибо за ваше время. Извините за орфографические ошибки я не родной.
JasonTS
1

голосов
1

ответ
116

Просмотры

Отмена каскадных удалений в плотной базе данных

У меня довольно большая система производства базы данных, на основе большой иерархии узлов каждого с 10+ связанных моделей. Если кто-то удаляет узел довольно высоко в дереве, может быть тысячи моделей удалены, и если это удаление было ошибкой, восстанавливающий их может быть очень трудно. Я ищу способ, чтобы дать мне легкий «отменить» вариант. Я попытался с помощью Django-реверсии, но кажется, что для того, чтобы получить функциональные возможности, я хочу (легко возвращаясь большим каскадное удаление) он должен хранить кучу информации с каждым пересмотром. Когда я создавал первоначальные изменения, процесс менее 10% сделано, и это уже с помощью 8GB в моей базе данных, которая не будет работать для меня. Итак, есть стандартное решение для этой проблемы? Или способ настроить Django-реверсию, чтобы соответствовать моему случаю использования?
3

голосов
1

ответ
267

Просмотры

How to store parent pointers and data in a django reversion?

I'm having some trouble with some code for a django-reversion system I have set up. I have a django model ObjectClass that inherits from a non-abstract model _concept. Long story, very unchangeable now. Makes sense in the rest of the context of the code. On the class _concept I have mandatory ForeignKey field workgroup off to another model. I have registered ObjectClass with Django reversion like so: reversion.unregister(ObjectClass) reversion.register(ObjectClass,follow=['_concept_ptr']) All old versions save and can be compared using 'django-reversion-compare'. Unfortunately when I then click on any old version to view the historical version I get the error: RevertError at /module.py Could not revert revision, due to database integrity errors. After some digging in the django-reversion code, I've done some fiddling and found that the error is coming up thus: RelatedObjectDoesNotExist at /module.py _concept has no workgroup. Now I've inspected the stored versions in the database and found a few things: Any given historical reversion.models.version of a _concept has a workgroup in the serialized_data field (which is expected). Any given historical reversion.models.version of a ObjectClass does not have any of the parent information in the serialized_data field (which is expected). Any given historical reversion.models.version of an ObjectClass does not have any a _concept_ptr in the serialized_data field (which is not expected). I'd suspect that django-reversion may have issues with fields that start with an underscore, however I have other fields that start with an underscore. So I'm at a loss here. Is there a way to have this a model setup like this work? edit: After more checking it seems that the has no workgroup exception was from a Haystack call, which was alerting me to the fact that reversion is ignoring the workgroup for some reason. I checked the database and this is whats in being serialized for an item (newlines added for readability): In [28]: myobj.serialized_data Out[28]: u'[{"fields": { "definition": "A code for sex.\\r\\n", "_is_locked": false, "workgroup": 3, "created": "2015-12-27T07:45:10.409Z", "modified": "2015-12-27T08:38:26.989Z", "readyToReview": false, "_is_public": false, "name": "Sex Code" }, "model": "aristotle_mdr._concept", "pk": 30}]' edit 2: After disabling the haystack indexers everything works fine now, the issue is the Haystack signals are called when django-reversion tries to save the items to check consistency - then django calls the haystack post_save signals which try to update the index with incomplete data. Still no solution yet. What I need in my haystack handler is either a way to determine if I'm inside a revisions transaction, or a way to prevent reversion from letting those signals fire. The latter is probably a better long term goal as I suspect that just by looking at revisions it is updating the Haystack index.
2

голосов
0

ответ
99

Просмотры

Управление транзакциями Django среди различных запросов HTTP

Я работал на Джанго фоновой, основной случай использования будет способность хранить определенный набор картинок со связанными тегами. В настоящее время конструкции предусматривает посвященный REST-FUL API, для создания нового набора, добавив картинку к данному набору и ассоциированию теги к данному набору: это приводит к различным обращениям клиентов. Например: BEGIN «создать новый набор» сделка создать новый набор и получить набор ID загрузить первую фотографию набора загрузить второе изображение из набора (И так далее, в зависимости от общего количества снимков ... ) Добавить тег, связанные с этим вновь добавленным набором КОНЦА сделки Как можно совершить / откат такой сделки, зная, что она разделена между различными запросами HTTP? Могу ли я имея вопрос дизайна здесь? Должен ли я за один кумулятивный запрос HTTP подход? Пожалуйста, примите во внимание, что такой фоновый будут использоваться с мобильными устройствами, которые могут пострадать от временной потери сигнала. Любые советы приветствуются. UPDATE: Было бы удобно использовать модель управления версиями пакетов, такие как Джанго-пересмотры, чтобы решить проблему?
codeJack
2

голосов
1

ответ
378

Просмотры

How to restore related objects with django-reversion

Как восстановить связанные объекты Джанго-реверсии. Я попытался следующие, не работает ... models.py: @ reversion.register (следуйте = [ 'bar_set',]) класс Foo (models.Model): Защиту сохранить (самостоятельно, * арг ** kwargs): с transaction.atomic (), reversion.create_revision (): возвращение супер (Foo, самость) .save (* арг ** kwargs) @ reversion.register класс Bar (models.Model): Foo = models.ForeignKey (Foo) защиту сохранить (самостоятельно, * арг ** kwargs): с transaction.atomic (), reversion.create_revision (): возвращение супер (Bar, самость) .save (* арг, ** kwargs) и следующий тест test.py : класс TestModels (TestCase): защиту test_soft_delete (Я): от myapp.models импорта Foo, Bar а = Foo () a.save () b1 = Bar (Foo = а) b1.save () b2 = Bar (Foo = а) b2.save () а. удалить () self.assertEqual (0, Foo.objects.count ()) self.assertEqual (0, Bar.objects.count ()) версия = reversion.get_deleted (Foo) [0] # Существует только один. version.revert () self.assertEqual (1, Foo.objects.count ()) self.assertEqual (2, Bar.objects.count ()) # ЗДЕСЬ ЭТО НЕ: 2 = 0
user3142459
2

голосов
2

ответ
2.6k

Просмотры

Джанго-реверсия отмены функций - восстановление нескольких объектов

Я пытаюсь выполнить «отменить» функцию в Джанго проекта с Джанго-реверсии в случае, когда пользователь может случайно изменить несколько объектов. Использование панели администратора не будет работать, как один должен вернуть объекты один за одним. Моя проблема заключается в том, что я не могу создать версию, которая содержит данные о более чем одного объекта. Даже когда я с reversion.create_revision (). Res.object.all () удалить (), то я не могу получить доступ к пересмотру этой группы этого изменения. Это расщепляется в «один объект один revision.models.Version» способом. В работе [103]: reversion.models.Version.objects.all () Out [103]:. [,] Я пробовал также через reversion.models.Revision.objects.all () order_by ( '- DATE_CREATED') [ 0] .version_set.all (), но он также вернулся только один вариант для одного удаленного объекта Res. Кажется, я что-то не хватает.
Jakub Głazik
1

голосов
2

ответ
1.4k

Просмотры

Предыдущая версия Джанго-реверсии контролируемого объекта

Я использую то, что Джанго реверсии документы называют низкоуровневый API для того, чтобы получить доступ к истории реверсии в моем собственном коде, кроме администратора. Для хранения метаданных, я расширил модель Revision, создав свою собственную модель, включающую в себя OneToOneField (Revision). Все идет нормально. Но учитывая, что ссылка на Revision, как я могу получить доступ к ревизии непосредственно перед ним? Например, чтобы создать список изменений между этой версией и предыдущим, есть ли более эффективный метод, чем вызов обратно reversion.get_for_object и поиск в список для версии я ищу?
Etaoin
3

голосов
2

ответ
923

Просмотры

Джанго - реверсия и Юг - Как обновить предыдущие ревизии при обновлении модели?

Я хотел бы сохранить прошлые пересмотры экземпляров MyModel, при обновлении и миграции MyModel с югом. Можно ли обновить предыдущие ревизии? Нужно ли обновлять ревизии на все типы изменений в модель? Какие изменения, если таковые имеются, заставит меня не стереть историю изменений ни на что? Есть элегантный способ автоматизировать процесс обновления пересмотра?
Jonathan
2

голосов
1

ответ
935

Просмотры

Джанго-реверсия сохраняет изменения, правильно в оболочке, но не в представлениях

Я столкнулся вопрос, который несколько реверса Джанго реверсии не сохраняет изменения, внесенные в версиях оболочки используются: Джанго: v1.3.1 Джанго-реверсия: v1.5.7 я написал класс, который может быть использован для сохранения / отмены изменений, сделанных к модели: импорт реверсии, класс DateTime Execute: модель = нет delete_ids = [] Защита __init __ (я, модель): self.model = модели, если не reversion.is_registered (модель): reversion.register (модель) Защита обновлению (самообеспечение , п): ID = n.pk, если Len (self.model.objects.filter (рк = Id))> 0: т = self.model.objects.get (рк = Id), если Len (reversion.get_for_object (м )) == 1: # Обновление вновь вставляется элемент reversion.get_for_object (м) .delete () # реверсии список только один длинный. с reversion.create_revision (): т = п m.save () остальное: # Обновление существующего элемента. список реверсии будет по крайней мере 2 долго, если Len (reversion.get_for_object (м)) == 0: # Добавить себя в качестве первого пересмотра. с reversion.create_revision (): m.save () с reversion.create_revision (): # Добавить обновляет т = п m.save () Защиту вставки (я, п): с reversion.create_revision (): n.pk = None n.save () возвращают n.pk защиту удалить (самоощущение, п): ID = n.pk если Len (self.model.objects.filter (рк = идентификатор))> 0: т = self.model.objects.get (рк = Id) с reversion.create_revision (): m.save () delete_ids.append (ID) m.delete () защиту отбросить (я, п): Модель = Нет delete_ids = [] Защита __init __ (самостоятельно, модель): self.model = модель, если не reversion.is_registered (модель): reversion.register (модель) Защиты обновления (самостоятельный, N): ID = n.pk; если Len (self.model.objects.filter (рк = Id))> 0: т = self.model.objects.get (рк = Id), если Len (reversion.get_for_object (м)) == 1: # Обновление новой вставляемый элемент reversion.get_for_object (м) .delete () # список реверсии только один длинный. с reversion.create_revision (): т = п m.save () остальное: # Обновление существующего элемента. список реверсии будет по крайней мере 2 долго, если Len (reversion.get_for_object (м)) == 0: # Добавить себя в качестве первого пересмотра. с reversion.create_revision (): м. ]) При т в tm_data: если (LEN (Testmatrix.objects.filter (рк = т [ 'ID']))> 0): тм = Testmatrix.objects.get (рк = т [ 'ID']), если тм .os = т [ 'sub_col']:! tm.os = т [ 'sub_col'] печать "ДО:", reversion.get_for_object (тм) # Список возвращается в виде пустой [] tm_execute.update (тм) печать «ПОСЛЕ: », reversion.get_for_object (тм) # списка.Возвраты как пустые [] # но последующее чтение имеет одну запись # ревизии. json_response = { 'RET': 'Успех'} вернуть HttpResponse (simplejson.dumps (json_response), тип_mime =» приложение / JavaScript ") Я вижу список будет только один длинным последующие чтения: [] На данный момент модель фиксирует все изменения, и нет никакого способа, чтобы вернуть их обратно. Не знаю, почему разница, поскольку я использую тот же код в обоих случаях. Я даже использовал PDB, чтобы проверить содержимое списка после того, как пересмотр с reversion.create_revision (): m.save () и она была пуста, когда я шел через функцию обновления при запуске через представления, но правильно показывает записи правок, когда отлаживается через приглашение оболочки ,
rajivRaja
4

голосов
2

ответ
2.1k

Просмотры

Как добавить Джанго-реверсии к приложению, разработанных с использованием Джанго и Джанго-остальные рамки

У меня есть приложение разработано с использованием Django и Django Rest рамки. Я хотел бы добавить функцию Джанго-реверсии мое приложение. Я уже пытался http://django-reversion.readthedocs.org/en/latest/api.html#low-level-api, но я не в состоянии сделать определенные изменения в мое приложение. Ниже перечислены модули приложения, в котором я хотел бы включить Django-реверсии для восстановления объектов, если они удаляются. Как установить конфигурацию Джанго-реверсии для приведенных ниже модулей admin.py:- из django.contrib импорта администратора from.models импорта Категория admin.site.register (категория) models.py:- от django.db импортных моделей класса Категория ( models.Model): имя = models.CharField (max_length = 64, уникальный = True) Защита __unicode __ (Я): возвращение self.name serializers.py:- из rest_framework импорта сериализаторов из.
Praneeth
2

голосов
1

ответ
873

Просмотры

Показать историю журнала изменений для экземпляра модели с использованием Джанго-реверсии

Использование: Джанго 1.10 реверсии 2.0.8. Мой вопрос заключается в том, чтобы показать хороший список изменений, сделанных в данной модели, например. Я имею в виду, что пользователь может быстро просмотреть список всех изменений (новые значения полей) во всех пересмотров. Ему не нужно о видеть все поля только новые значения измененных единиц. Таким образом, я обнаружил, что хороший инструмент для сохранения изменений является Джанго-реверсии. Тем не менее, я не могу найти решение моей проблемы, которая, как я уже говорил, чтобы показать хорошую историю изменений-журнал для данной модели, например. Я нашел решение, которое может сравнить две версии Джанго-реверсия-сравнить, но это не то, что я ищу. Может быть, есть лучший инструмент для этого? Задача слишком быстро показать пользователю, что было изменено, кто и когда. Модель проста и не хранит много данных. Это магазин, однако внешние ключи.
mrangry777
8

голосов
3

ответ
761

Просмотры

Django администратора, используя как Django реверсии и Django-Import-Export

Я пытаюсь включить Django реверсии и Django-импорт-экспорт для одной и той же модели ... Не уверен, что, если моя логика верна, или если я должен использовать несколько admin.py файлов и т.д. Я попытался следующие, но это только позволяет Django реверсии работать, если я включаю их вокруг импорт Экспорт работ. Было бы замечательно, если я мог бы и включен в то же время. класс MyModelAdmin (reversion.VersionAdmin, ImportExportModelAdmin): пройти я имел взгляд на readthedocs для обоих проектов, но все еще потеряно. http://django-reversion.readthedocs.org/en/latest/admin.html#admin https://django-import-export.readthedocs.org/en/latest/getting_started.html Приветствия xc0m
xc0m
2

голосов
0

ответ
404

Просмотры

Наиболее эффективный способ сделать сводную таблицу, как запрос суммировать изменения пользователя в Джанго

Я хочу, чтобы показать пользователю 10 последних изменений во всех моих объектах базы данных. Я использую Django-реверсии отслеживать историю изменений в моей модели объектов. Я также несколько дублирующих это в кратком виде. Где реверсия создает список истории по объекту, резюме вид просто отслеживает один список с каждым изменением в хронологическом порядке. Является ли это более эффективным для запроса с этим сводным списком, или могу / должен я просто запросить все таблицы реверсии для самых последних 10 правок по всем объектам? Вторая часть: Я хочу, чтобы показать пользователю свои изменения, сгруппированных по объекту Итак, давайте предположим, что пользователь отредактирован 3 объекта 10 раз каждый. Пользователь отредактирован каждый объект в разные дни, поэтому на 1-й день, пользователь редактировать все 3, на 2-й день, пользователь может быть отредактирован 1 из них и т.д. Я хочу, чтобы показать пользователю таблицу, которая гласит Дата Объект вашего последнего редактирования Дата последнего редактирования объекта 1 12-24-11 12-25-11 Объект 2 12-20-11 12-23-11 Где второй столбец является самым последним пользователем конкретных прав и третий столбец является самым последним редактирования любым пользователем. Я хочу, чтобы пользователь мог выбрать объект 1, а затем увидеть все свои правки для этого объекта: Дата Объект вашего последнего редактирования Дата последнего редактирования объекта 1 12-24-11 12-25-11 отредактирован имя 12-24-11 отредактирован тип 12-19-11 отредактирован предмет 12-18-11 отредактирован дата 12-18- 11 отредактированный тип 12-16-11 Объект 2 12-20-11 12-23-11 Как можно структурировать этот запрос? Самый прямой способ, которым я могу думать о том, чтобы запросить отчетливый / уникальный список объектов, отфильтрованных пользователем либо из таблиц реверсии или сводной таблицы, а затем запросить возврат пользователя и объектом, чтобы получить более подробную историю. Кажется, что это может быть более эффективным. Может, я хочу создать еще одну сводную таблицу с помощью пользователя, который будет отслеживать изменения для упрощения запросов в этом формате? Как бы я структурировать этот тип таблицы? Часть кода. Я использую это, чтобы получить список всей истории для данного объекта. Это дает мне список версий для объекта базы данных, заметка о том, что был отредактирован, дата редактирования, и пользователь, который внес изменения: version_list = Version.objects.get_for_object (объект) .select_related ( «revision__user») и Я просто использовать это, чтобы получить простой список правок. В сводной таблице, последние 10 записей самые последние изменения (объект, подробности о том, что было изменено, дата и пользователь): whats_new_items = WhatsNew.objects.all () [0:10]
Ed.
3

голосов
2

ответ
1.3k

Просмотры

Джанго-реверсия вернуться ManyToMany поля вне администратора

Я использую Django-реверсии в моем проекте. И это работает хорошо, кроме одного: я не могу получить предыдущие версии полого ManyToMany. Но в Джанго админ это работает, но не в моем коде. Чтобы получить предыдущую версию я использую следующий код:. Vprod = Version.objects.get_for_date (продукт, ondate) .get_object_version () объекта, и он работает только m2m поле, где «продукт» является объектом класса продукта, класс продукта (models.Model) : имя = models.CharField (mAX_LENGTH = 255) элементы = models.ManyToManyField (ы) класса Sku (models.Model): имя = models.CharField (max_length = 255, verbose_name = "Артикул наименование") я могу получить vprod.name и возвращает то, что мне нужно, но когда я пытаюсь vprod.elements.all () возвращает список только текущую (последнюю) версию, даже если число элементов изменилось.
Eugene Nagorny
2

голосов
1

ответ
434

Просмотры

Как определить сериализации для пользовательского типа, который используется в качестве значения для пользовательских полей Джанго

Я сделал свой собственный models.TextField подкласс, который принимает классы, как ее значения и кодирует эти значения в качестве атрибута CODE данного класса в базе данных. Все это до сих пор работают, но я хочу использовать Django-реверсию, который сериализующую модели и сохраняет модель в таблице версии каждый раз, когда производится изменение. Я использую это для целей аудита по моему заявлению. Реверсии не может сериализовать значения, которые я задаю в моей настраиваемого поля, утверждая, что они не являются сериализации. Как я могу идти об определении метода сериализации для моих объектов? Я не могу просто определить DjangoJSONEncoder подкласс (класс, Django использует для сериализации по умолчанию), потому что у меня нет контроля над кодом, который вызывает его метод сериализации, потому что это часть Django-реверсии. Это трассировки стека,
3

голосов
1

ответ
1.1k

Просмотры

Захват всех полей, которые были изменены в модели

То, что я пытаюсь сделать, это получить запись всех полей, которые могут быть изменены после того, как объект изменился. Я знаю, что есть много способов сказать, если объект изменился, а также некоторыми другие пакеты Джанго, как Джанго-пересмотры, Джанго-реверсия и Джанго-простой-история, но я хочу, чтобы иметь возможность иметь отчет, который показывает все поле, которые изменились, а не только один. Я также, что показать, что поле было до того, как было изменено так, что я могу иметь полный аудит на объекте. Я думал о добавлении поля JSon с Джанго-jsonfield но чувствовал своего рода неправильно делать это так. Как будто это был хак или грязной работой вокруг. Есть ли более традиционный или простой способ сделать это.
Austin
5

голосов
1

ответ
207

Просмотры

Не создавайте новую версию, если ничего не изменилось в Django-реверсии

Я хотел бы сохранить новую версию объекта, только если что-то изменилось, в Джанго-реверсии. Я пошел через документацию и не нашел ничего об этом. Как я могу добиться этого?
pawel.ad
2

голосов
1

ответ
805

Просмотры

Отслеживание обратной связи для ForeignKey в Джанго-реверсия

Я пытаюсь выяснить, как, как отслеживать изменения для ForeignKey отношений в Django с использованием Django-реверсии. Короче говоря, я пытаюсь моделировать список кодов, который содержит коды, которые только принадлежат к одному списка кодов. Это может быть смоделирован с помощью внешнего ключа, как так: класс Codelist (models.Model): имя = models.CharField (max_length = 100) код класса (models.Model): значение = models.PositiveIntegerField (MAX_LENGTH = 100) смысловые = модели .CharField (max_length = 100) = Codelist models.ForeignKey (Codelist, related_name = «коды») Кроме того, единственный способ редактирования кода является использование инлайн форму на сайте администратора доступ через его кодов. Для всех намерений и целей, коды принадлежат спискам кодам, как они должны ... Кроме случаев, когда речь идет о реверсии. Я использую reversion.middleware.RevisionMiddleware отслеживать все изменения в окне редактирования, поскольку есть некоторые неадминистративные формы для редактирования кодов. То, что я хотел, когда я вижу историю списка кодов, то следует изменение кодов, а также, но я не могу понять, что из в Django-реверсии API. Вопрос заключается в том, что API охватывает отслеживанию коды, и, видя изменения в список кодов, а не наоборот, следуя обращенные отношения. Кто-нибудь знает, как это может быть сделано?
2

голосов
2

ответ
683

Просмотры

Mark as deleted instead of actually deleting in DeleteView

Я удаление объектов в различных моделях с DeleteView в Django. Проблема заключается в том, что я не хочу, чтобы объекты, которые будут полностью удалены, а просто скрыты. Сначала я подумал, что это имело смысл держать мои взгляды, как они есть, но вместо того, чтобы переопределения метода удаления в каждой модели, чтобы сделать следующий образом Защиты удалить (сам, сила = False): если сила: возвращение супер (ModelName, самостоятельно) .delete ( ) еще: self.is_deleted = True self.save (), но потом я заметил, что метод удаления обыкновение называться навалом удаления поэтому этот метод будет слишком рискованным. Может кто-то порекомендовать хороший способ сделать это? Я все еще хочу, чтобы сохранить нормальное поведение DeleteView, но он должен просто «дезактивировать» объекты, а не удалять их. DeleteView выглядит следующим образом: Защита удалить (самостоятельно, запрос, * арг ** kwargs): ""» Вызывает метод удаления () на извлеченном объекте, а затем перенаправляет к URL успеха. ""»Self.object = self.get_object () success_url = self.get_success_url () self.object.delete () возвращают HttpResponseRedirect (success_url) Будет ли достаточно, если я заменю self.object.delete () с self.object. is_deleted = True self.object.save () Когда я пометил свои объекты как удаленные, как я могу убедиться, что мое querysets обыкновения содержать удаленные объекты? Я мог бы просто заменить get_queryset () в моем ListView, но они должны быть исключены из любой QuerySet на странице, так что я интересно, если я хотел бы получить лучшие результаты, если я настроить менеджер объектов вместо? Я смотрел на Джанго-реверсии. Могу ли я просто просто удалить все объекты в обычном порядке, а затем использовать Джанго-реверсии, если я хочу, чтобы восстановить их? Существуют ли какие-либо недостатки этого решения?
Jamgreen
2

голосов
0

ответ
379

Просмотры

integration django-reversion with tastypie

I'would любят хранить историю моих модельных изменений. Я нашел расширение Джанго-реверсии, и это выглядит довольно хорошо, но я понятия не имею, как межтереть его tastypie. Мой пример модель: класс Автор (models.Model): Имя = models.CharField (max_length = 15) фамилия = models.CharField (max_length = 20) Защита __unicode __ (Я): возвращение класс self.name Book (models.Model): название = models.CharField (max_length = 30) Автор = models.ForeignKey (Автор) = models.CharField ISBN (max_length = 30) Защита __unicode __ (Я): возвращение self.title ресурсы: а и класс ResourceAuthor (ModelResource): класс Meta: QuerySet = Author.objects.all () resource_name = "автор" класс ResourceBook (ModelResource): автор = fields.ForeignKey (ResourceAuthor, 'автор', полный = True) класс Meta: QuerySet = Book.objects.all () resource_name = «Книга» Сохранение / обновление работает, так что каждое действие создает какое-то снимок. Для получения информации об истории модели: reversion.get_for_object (модель) и мой вопрос, как создать API отдыха для истории? Я был бы рад, если один из вас мог бы поделиться с опытом в этой теме.
ASmith78
3

голосов
1

ответ
1.1k

Просмотры

Джанго-реверсия как получить идентификатор пользователя

Я использую Django-реверсию для обеспечения истории для моделей я обнаружил, что реверсия создает две таблицы, таблицы «reversion_revision» и «reversion_version» И в reversion_revision, хранится идентификатор пользователя, который делает последние изменения. Но я не могу получить эту информацию. Я использую функцию «reversion.get_for_object (модель)», чтобы получить все версии определенной модели, но функция возвращает только за мной информацию, которые хранятся в таблице «reversion_version», и мне нужно, чтобы получить идентификатор пользователя в таблице reversion_revision Кто-то теперь, как я могу сделать, чтобы получить идентификатор пользователя?
Daniel Dias
8

голосов
1

ответ
2.2k

Просмотры

Джанго реверсия не сохраняет изменения, внесенные в скорлупе

Я сделал начальные шаги установки и создали первоначальные ревизии, но тогда, когда я сохранить модель в DJANGO оболочки, новая версия не создается: В работе [1]: s = Shop.objects.all () [0] В [2 ]: импорт реверсии В работе [3]: s.name = 'а' В [4]: ​​s.save () в [5]: s.name = 'B' В работе [6]: s.save (В) [ 7]: reversion.get_for_object (ы) Из [7]: [] Это начальная редакция. Когда я обновить модель с точки зрения, пересмотр был успешно создан. Что мне не хватает? Файл models.py является: ... класс Магазин (модель): ... импорт реверсии reversion.register (магазин) Я вижу способ реверсии среди post_save приемника, хотя это не называется, когда я его отладки. У меня есть Django v1.4.1, v1.6.2 реверсии.
culebrón
2

голосов
2

ответ
75

Просмотры

Show field_dict.items() of django-reversion in template

I am tring to use django reversion app in my project. I am little bit comfused. How to show list of changes (field_dict.items()) in template? models.py: @reversion.register() class Function(models.Model): ***FIELDS*** views.py: def function_revisions(request, function_code): function = get_object_or_404(Function, pk=function_code) versions = Version.objects.get_for_object(Function) context = { 'function': function, 'versions': versions, } return render(request, 'project/function_revisions.html', context) function_revisions.html: {% for version in versions %} Version: {{ forloop.counter }}. Revision by {{ version.revision.user }}. Date of revision : {{ version.revision.date_created }}. {% for field_name, field_value in version.field_dict.items() %}
Nurzhan Nogerbek
3

голосов
1

ответ
356

Просмотры

Дата изменения от Джанго-реверсии

Я использовал, чтобы иметь два поля даты, чтобы сохранить дату создания объекта и измененный и два иностранных ключевых полей для сохранения, создавших или последнее изменение объекта. Теперь я использую Джанго-реверсию, и я в состоянии спасти все пользователь, которые модифицировали объект вместо только последнего человека. Но как я могу напечатать дату создания объекта и отредактировано с помощью Джанго-реверсии вместо того, чтобы хранить эти данные в самом объекте?
Jamgreen

Связанные вопросы