~widelands-dev/widelands-website/django_staticfiles

« back to all changes in this revision

Viewing changes to wl_utils.py

  • Committer: franku
  • Date: 2016-12-13 18:28:51 UTC
  • mto: This revision was merged to the branch mainline in revision 443.
  • Revision ID: somal@arcor.de-20161213182851-bo5ebf8pdvw5beua
run the script

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
 
 
17
 
 
18
 
from django.db.models.fields.related_descriptors import ReverseOneToOneDescriptor
 
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
19
26
 
20
27
from django.db.models import OneToOneField
 
28
from django.db.models.fields.related import SingleRelatedObjectDescriptor
21
29
from django.db import models
22
30
 
23
31
 
24
 
class AutoReverseOneToOneDescriptor(ReverseOneToOneDescriptor):
 
32
class AutoSingleRelatedObjectDescriptor(SingleRelatedObjectDescriptor):
25
33
    """The descriptor that handles the object creation for an
26
34
    AutoOneToOneField."""
27
35
 
29
37
        model = getattr(self.related, 'related_model', self.related.model)
30
38
 
31
39
        try:
32
 
            return (super(AutoReverseOneToOneDescriptor, self)
 
40
            return (super(AutoSingleRelatedObjectDescriptor, self)
33
41
                    .__get__(instance, instance_type))
34
42
        except model.DoesNotExist:
35
43
            obj = model(**{self.related.field.name: instance})
39
47
            # Don't return obj directly, otherwise it won't be added
40
48
            # to Django's cache, and the first 2 calls to obj.relobj
41
49
            # will return 2 different in-memory objects
42
 
            return (super(AutoReverseOneToOneDescriptor, self)
 
50
            return (super(AutoSingleRelatedObjectDescriptor, self)
43
51
                    .__get__(instance, instance_type))
44
52
 
45
53
 
49
57
 
50
58
    def contribute_to_related_class(self, cls, related):
51
59
        setattr(cls, related.get_accessor_name(),
52
 
                AutoReverseOneToOneDescriptor(related))
 
60
                AutoSingleRelatedObjectDescriptor(related))