~widelands-dev/widelands-website/django_staticfiles

« back to all changes in this revision

Viewing changes to wl_utils.py

  • Committer: franku
  • Date: 2018-04-07 09:48:02 UTC
  • mto: This revision was merged to the branch mainline in revision 491.
  • Revision ID: somal@arcor.de-20180407094802-rh3juumycm31p94w
run through 1.9 release notes

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
# Initial implemenation details about AutoOneToOneField:
14
14
#   http://softwaremaniacs.org/blog/2007/03/07/auto-one-to-one-field/
15
15
#
16
 
# This doesn't worked anymore with django 1.8
17
 
# changed according to:
18
 
#   https://github.com/skorokithakis/django-annoying/issues/36
19
 
 
20
 
 
21
 
# SingleRelatedObjectDescriptor gets renamed with Django 1.9
22
 
try:
23
 
    from django.db.models.fields.related import SingleRelatedObjectDescriptor
24
 
except ImportError:
25
 
    from django.db.models.fields.related_descriptors import ReverseOneToOneDescriptor as SingleRelatedObjectDescriptor
 
16
 
 
17
 
 
18
from django.db.models.fields.related_descriptors import ReverseOneToOneDescriptor
26
19
 
27
20
from django.db.models import OneToOneField
28
21
from django.db import models
29
22
 
30
23
 
31
 
class AutoSingleRelatedObjectDescriptor(SingleRelatedObjectDescriptor):
 
24
class AutoReverseOneToOneDescriptor(ReverseOneToOneDescriptor):
32
25
    """The descriptor that handles the object creation for an
33
26
    AutoOneToOneField."""
34
27
 
36
29
        model = getattr(self.related, 'related_model', self.related.model)
37
30
 
38
31
        try:
39
 
            return (super(AutoSingleRelatedObjectDescriptor, self)
 
32
            return (super(AutoReverseOneToOneDescriptor, self)
40
33
                    .__get__(instance, instance_type))
41
34
        except model.DoesNotExist:
42
35
            obj = model(**{self.related.field.name: instance})
46
39
            # Don't return obj directly, otherwise it won't be added
47
40
            # to Django's cache, and the first 2 calls to obj.relobj
48
41
            # will return 2 different in-memory objects
49
 
            return (super(AutoSingleRelatedObjectDescriptor, self)
 
42
            return (super(AutoReverseOneToOneDescriptor, self)
50
43
                    .__get__(instance, instance_type))
51
44
 
52
45
 
56
49
 
57
50
    def contribute_to_related_class(self, cls, related):
58
51
        setattr(cls, related.get_accessor_name(),
59
 
                AutoSingleRelatedObjectDescriptor(related))
 
52
                AutoReverseOneToOneDescriptor(related))