-
Notifications
You must be signed in to change notification settings - Fork 423
/
models.py
121 lines (85 loc) · 3.34 KB
/
models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# coding: utf-8
from __future__ import unicode_literals
from django.conf import settings
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.utils import six
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext, ugettext_lazy
try:
from django.urls import reverse
except ImportError:
# to keep backward (Django <= 1.9) compatibility
from django.core.urlresolvers import reverse
@six.python_2_unicode_compatible
class Person(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200, verbose_name='surname')
occupation = models.ForeignKey(
'Occupation', related_name='people',
null=True, verbose_name='occupation of the person')
trans_test = models.CharField(
max_length=200, blank=True,
verbose_name=ugettext("translation test"))
trans_test_lazy = models.CharField(
max_length=200, blank=True,
verbose_name=ugettext_lazy("translation test lazy"))
safe = models.CharField(
max_length=200, blank=True, verbose_name=mark_safe("<b>Safe</b>"))
website = models.URLField(
max_length=200, null=True, blank=True,
verbose_name="web site")
birthdate = models.DateField(null=True)
content_type = models.ForeignKey(ContentType, null=True, blank=True)
object_id = models.PositiveIntegerField(null=True, blank=True)
foreign_key = GenericForeignKey()
class Meta:
verbose_name = "person"
verbose_name_plural = "people"
def __str__(self):
return self.first_name
@property
def name(self):
return "%s %s" % (self.first_name, self.last_name)
def get_absolute_url(self):
return reverse('person', args=(self.pk, ))
class PersonProxy(Person):
class Meta:
proxy = True
ordering = ('last_name', )
@six.python_2_unicode_compatible
class Occupation(models.Model):
name = models.CharField(max_length=200)
region = models.ForeignKey('Region', null=True)
boolean = models.BooleanField(null=True)
boolean_with_choices = models.BooleanField(null=True, choices=(
(True, 'Yes'),
(False, 'No')
))
def get_absolute_url(self):
return reverse('occupation', args=(self.pk, ))
def __str__(self):
return self.name
@six.python_2_unicode_compatible
class Region(models.Model):
name = models.CharField(max_length=200)
mayor = models.OneToOneField(Person, null=True)
def __str__(self):
return self.name
class PersonInformation(models.Model):
person = models.ForeignKey(
Person, related_name='info_list', verbose_name='Information')
class Player(models.Model):
person = models.ForeignKey(Person)
created = models.DateTimeField(auto_now_add=True)
score = models.PositiveIntegerField()
# -- haystack -----------------------------------------------------------------
if not six.PY3: # Haystack isn't compatible with Python 3
from haystack import indexes
class PersonIndex(indexes.SearchIndex, indexes.Indexable):
first_name = indexes.CharField(document=True)
def get_model(self):
return Person
def index_queryset(self, using=None):
return self.get_model().objects.all()