Project

General

Profile

Statistics
| Branch: | Revision:

root / env / lib / python2.7 / site-packages / south / tests / fakeapp / models.py @ d1a4905f

History | View | Annotate | Download (3.78 KB)

1
# -*- coding: UTF-8 -*-
2

    
3
from django.db import models
4
from django.contrib.auth.models import User as UserAlias
5

    
6
from south.modelsinspector import add_introspection_rules
7

    
8
on_delete_is_available = hasattr(models, "PROTECT") # models here is django.db.models
9

    
10
def default_func():
11
    return "yays"
12

    
13
# An empty case.
14
class Other1(models.Model): pass
15

    
16
# Another one
17
class Other3(models.Model): pass
18
def get_sentinel_object():
19
    """
20
    A function to return the object to be used in place of any deleted object,
21
    when using the SET option for on_delete.
22
    """
23
    # Create a new one, so we always have an instance to test with. Can't work!
24
    return Other3()
25

    
26
# Nastiness.
27
class HorribleModel(models.Model):
28
    "A model to test the edge cases of model parsing"
29
    
30
    ZERO, ONE = range(2)
31
    
32
    # First, some nice fields
33
    name = models.CharField(max_length=255)
34
    short_name = models.CharField(max_length=50)
35
    slug = models.SlugField(unique=True)
36
    
37
    # A ForeignKey, to a model above, and then below
38
    o1 = models.ForeignKey(Other1)
39
    o2 = models.ForeignKey('Other2')
40
    
41
    if on_delete_is_available:
42
        o_set_null_on_delete = models.ForeignKey('Other3', null=True, on_delete=models.SET_NULL)
43
        o_cascade_delete = models.ForeignKey('Other3', null=True, on_delete=models.CASCADE, related_name="cascademe")
44
        o_protect = models.ForeignKey('Other3', null=True, on_delete=models.PROTECT, related_name="dontcascademe")
45
        o_default_on_delete = models.ForeignKey('Other3', null=True, default=1, on_delete=models.SET_DEFAULT, related_name="setmedefault")
46
        o_set_on_delete_function = models.ForeignKey('Other3', null=True, default=1, on_delete=models.SET(get_sentinel_object), related_name="setsentinel")
47
        o_set_on_delete_value = models.ForeignKey('Other3', null=True, default=1, on_delete=models.SET(get_sentinel_object()), related_name="setsentinelwithactualvalue") # dubious case
48
        o_no_action_on_delete = models.ForeignKey('Other3', null=True, default=1, on_delete=models.DO_NOTHING, related_name="deletemeatyourperil")
49
    
50
    
51
    # Now to something outside
52
    user = models.ForeignKey(UserAlias, related_name="horribles")
53
    
54
    # Unicode!
55
    code = models.CharField(max_length=25, default="↑↑↓↓←→←→BA")
56
    
57
    # Odd defaults!
58
    class_attr = models.IntegerField(default=ZERO)
59
    func = models.CharField(max_length=25, default=default_func)
60
    
61
    # Time to get nasty. Define a non-field choices, and use it
62
    choices = [('hello', '1'), ('world', '2')]
63
    choiced = models.CharField(max_length=20, choices=choices)
64
    
65
    class Meta:
66
        db_table = "my_fave"
67
        verbose_name = "Dr. Strangelove," + \
68
                     """or how I learned to stop worrying
69
and love the bomb"""
70
    
71
    # Now spread over multiple lines
72
    multiline = \
73
              models.TextField(
74
        )
75

    
76
# Special case.
77
class Other2(models.Model):
78
    # Try loading a field without a newline after it (inspect hates this)
79
    close_but_no_cigar = models.PositiveIntegerField(primary_key=True)
80

    
81
class CustomField(models.IntegerField):
82
    def __init__(self, an_other_model, **kwargs):
83
        super(CustomField, self).__init__(**kwargs)
84
        self.an_other_model = an_other_model
85

    
86
add_introspection_rules([
87
    (
88
        [CustomField],
89
        [],
90
        {'an_other_model': ('an_other_model', {})},
91
    ),
92
], ['^south\.tests\.fakeapp\.models\.CustomField'])
93

    
94
class BaseModel(models.Model):
95
    pass
96

    
97
class SubModel(BaseModel):
98
    others = models.ManyToManyField(Other1)
99
    custom = CustomField(Other2)
100

    
101
class CircularA(models.Model):
102
    c = models.ForeignKey('CircularC')
103

    
104
class CircularB(models.Model):
105
    a = models.ForeignKey(CircularA)
106

    
107
class CircularC(models.Model):
108
    b = models.ForeignKey(CircularB)
109

    
110
class Recursive(models.Model):
111
   self = models.ForeignKey('self')