Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ CONTRIBUTORS are and/or have been (alphabetic order):
Github: <https://github.com/LegoStormtroopr>
* C. Barrionuevo da Luz, Fabio
Github: <https://github.com/luzfcb>

* Wickström, Frank
Github: <https://github.com/frwickst>
11 changes: 9 additions & 2 deletions reversion_compare/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
except ImportError: # Django < 1.7
from django.contrib.admin.util import unquote, quote
from django.core.urlresolvers import reverse
from django.core.exceptions import ObjectDoesNotExist
from django.db import models
from django.http import Http404
from django.contrib import admin
Expand Down Expand Up @@ -106,9 +107,15 @@ def get_related(self):

def get_reverse_foreign_key(self):
obj = self.version.object_version.object
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this line is not needed anymore, it should be deleted.

# self = getattr(obj, self.field.related_name) #self.field.field_name
if self.has_int_pk and self.field.related_name and hasattr(obj, self.field.related_name):
ids = [v.id for v in getattr(obj, str(self.field.related_name)).all()] # is: version.field_dict[field.name]
if isinstance(self.field, models.fields.related.OneToOneRel):
try:
ids = [getattr(obj, str(self.field.related_name)).pk]
except ObjectDoesNotExist:
ids = []
else:
ids = [v.id for v in getattr(obj, str(self.field.related_name)).all()] # is: version.field_dict[field.name]

else:
return ([], [], [], []) # TODO: refactory that

Expand Down
3 changes: 2 additions & 1 deletion tests/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from reversion_compare.admin import CompareVersionAdmin

from .models import SimpleModel, Factory, Car, Person, Pet,\
VariantModel, CustomModel
VariantModel, CustomModel, Identity



Expand Down Expand Up @@ -58,6 +58,7 @@ class CustomModelAdmin(CompareVersionAdmin):
revision_manager = custom_revision_manager
admin.site.register(CustomModel, CustomModelAdmin)

admin.site.register(Identity, CustomModelAdmin)



Expand Down
7 changes: 7 additions & 0 deletions tests/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,13 @@ class Person(models.Model):
def __str__(self):
return self.name

@python_2_unicode_compatible
class Identity(models.Model):
id_numer = models.CharField(max_length=100)
person = models.OneToOneField(Person, related_name='_identity')
def __str__(self):
return self.id_numer

reversion.register(Person, follow=["pets"])
#reversion.register(Pet, follow=["person_set"])
reversion.register(Pet)
Expand Down
72 changes: 72 additions & 0 deletions tests/test_onetoone_field.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#!/usr/bin/env python
# coding: utf-8

"""
django-reversion-compare unittests
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

I used the setup from reversion_compare_test_project !

TODO:
* models.IntegerField()

:copyleft: 2012-2015 by the django-reversion-compare team, see AUTHORS for more details.
:license: GNU GPL v3 or above, see LICENSE for more details.
"""

from __future__ import absolute_import, division, print_function


try:
import django_tools
except ImportError as err:
msg = (
"Please install django-tools for unittests"
" - https://github.com/jedie/django-tools/"
" - Original error: %s"
) % err
raise ImportError(msg)

from reversion import get_for_object

from .test_utils.test_cases import BaseTestCase
from .test_utils.test_data import TestData


class OneToOneFieldTest(BaseTestCase):
"Test a model which uses a custom reversion manager."

def setUp(self):
super(OneToOneFieldTest, self).setUp()
test_data = TestData(verbose=False)
self.person, self.item = test_data.create_PersonIdentity_data()

queryset = get_for_object(self.person)
self.version_ids = queryset.values_list("pk", flat=True)

def test_select_compare(self):
response = self.client.get("/admin/tests/person/%s/history/" % self.person.pk)

self.assertContainsHtml(response,
'<input type="submit" value="compare">',
'<input type="radio" name="version_id1" value="%i" style="visibility:hidden" />' % self.version_ids[0],
'<input type="radio" name="version_id2" value="%i" checked="checked" />' % self.version_ids[0],
'<input type="radio" name="version_id1" value="%i" checked="checked" />' % self.version_ids[1],
'<input type="radio" name="version_id2" value="%i" />' % self.version_ids[1],
)

def test_compare(self):
response = self.client.get(
"/admin/tests/person/%s/history/compare/" % self.person.pk,
data={"version_id2":self.version_ids[0], "version_id1":self.version_ids[1]}
)

self.assertContainsHtml(response,
"""
<pre class="highlight">
<del>- Dave</del>
<ins>+ John</ins>
</pre>
""",
"<blockquote>version 2: change person name.</blockquote>",
)
18 changes: 17 additions & 1 deletion tests/test_utils/test_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
import reversion

from tests.models import SimpleModel, Person, Pet, \
Factory, Car, VariantModel, CustomModel
Factory, Car, VariantModel, CustomModel, Identity



Expand Down Expand Up @@ -368,3 +368,19 @@ def create_CustomModel_data(self):

return item1


def create_PersonIdentity_data(self):
with reversion.create_revision():
person = Person.objects.create(name="Dave")
identity = Identity.objects.create(id_numer="1234", person=person)

if self.verbose:
print("version 1:", person, identity)

with reversion.create_revision():
person.name = "John"
person.save()
reversion.set_comment("version 2: change person name.")

return person, identity