~ubuntu-branches/ubuntu/saucy/python-django/saucy-updates

1.3.7 by Luke Faraone
Import upstream version 1.5
1
from __future__ import unicode_literals
2
1.2.12 by Raphaël Hertzog
Import upstream version 1.4
3
from django.db import models
1.3.7 by Luke Faraone
Import upstream version 1.5
4
from django.utils.encoding import python_2_unicode_compatible
5
6
7
@python_2_unicode_compatible
1.2.10 by Chris Lamb
Import upstream version 1.3
8
class R(models.Model):
9
    is_default = models.BooleanField(default=False)
10
11
    def __str__(self):
12
        return "%s" % self.pk
13
14
15
get_default_r = lambda: R.objects.get_or_create(is_default=True)[0]
16
17
18
class S(models.Model):
19
    r = models.ForeignKey(R)
20
21
22
class T(models.Model):
23
    s = models.ForeignKey(S)
24
25
26
class U(models.Model):
27
    t = models.ForeignKey(T)
28
29
30
class RChild(R):
31
    pass
32
33
34
class A(models.Model):
35
    name = models.CharField(max_length=30)
36
37
    auto = models.ForeignKey(R, related_name="auto_set")
38
    auto_nullable = models.ForeignKey(R, null=True,
39
        related_name='auto_nullable_set')
40
    setvalue = models.ForeignKey(R, on_delete=models.SET(get_default_r),
41
        related_name='setvalue')
42
    setnull = models.ForeignKey(R, on_delete=models.SET_NULL, null=True,
43
        related_name='setnull_set')
44
    setdefault = models.ForeignKey(R, on_delete=models.SET_DEFAULT,
45
        default=get_default_r, related_name='setdefault_set')
46
    setdefault_none = models.ForeignKey(R, on_delete=models.SET_DEFAULT,
47
        default=None, null=True, related_name='setnull_nullable_set')
48
    cascade = models.ForeignKey(R, on_delete=models.CASCADE,
49
        related_name='cascade_set')
50
    cascade_nullable = models.ForeignKey(R, on_delete=models.CASCADE, null=True,
51
        related_name='cascade_nullable_set')
52
    protect = models.ForeignKey(R, on_delete=models.PROTECT, null=True)
53
    donothing = models.ForeignKey(R, on_delete=models.DO_NOTHING, null=True,
54
        related_name='donothing_set')
55
    child = models.ForeignKey(RChild, related_name="child")
56
    child_setnull = models.ForeignKey(RChild, on_delete=models.SET_NULL, null=True,
57
        related_name="child_setnull")
58
59
    # A OneToOneField is just a ForeignKey unique=True, so we don't duplicate
60
    # all the tests; just one smoke test to ensure on_delete works for it as
61
    # well.
62
    o2o_setnull = models.ForeignKey(R, null=True,
63
        on_delete=models.SET_NULL, related_name="o2o_nullable_set")
64
65
66
def create_a(name):
67
    a = A(name=name)
68
    for name in ('auto', 'auto_nullable', 'setvalue', 'setnull', 'setdefault',
69
                 'setdefault_none', 'cascade', 'cascade_nullable', 'protect',
70
                 'donothing', 'o2o_setnull'):
71
        r = R.objects.create()
72
        setattr(a, name, r)
73
    a.child = RChild.objects.create()
74
    a.child_setnull = RChild.objects.create()
75
    a.save()
76
    return a
77
78
79
class M(models.Model):
80
    m2m = models.ManyToManyField(R, related_name="m_set")
81
    m2m_through = models.ManyToManyField(R, through="MR",
82
        related_name="m_through_set")
83
    m2m_through_null = models.ManyToManyField(R, through="MRNull",
84
        related_name="m_through_null_set")
85
86
87
class MR(models.Model):
88
    m = models.ForeignKey(M)
89
    r = models.ForeignKey(R)
90
91
92
class MRNull(models.Model):
93
    m = models.ForeignKey(M)
94
    r = models.ForeignKey(R, null=True, on_delete=models.SET_NULL)
95
96
97
class Avatar(models.Model):
1.3.7 by Luke Faraone
Import upstream version 1.5
98
    desc = models.TextField(null=True)
1.2.10 by Chris Lamb
Import upstream version 1.3
99
100
101
class User(models.Model):
102
    avatar = models.ForeignKey(Avatar, null=True)
103
104
105
class HiddenUser(models.Model):
106
    r = models.ForeignKey(R, related_name="+")
107
108
109
class HiddenUserProfile(models.Model):
110
    user = models.ForeignKey(HiddenUser)
1.3.7 by Luke Faraone
Import upstream version 1.5
111
112
class M2MTo(models.Model):
113
    pass
114
115
class M2MFrom(models.Model):
116
    m2m = models.ManyToManyField(M2MTo)
117
118
class Parent(models.Model):
119
    pass
120
121
class Child(Parent):
122
    pass
123
124
class Base(models.Model):
125
    pass
126
127
class RelToBase(models.Model):
128
    base = models.ForeignKey(Base, on_delete=models.DO_NOTHING)