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
|
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.urls import reverse
from django.utils.safestring import mark_safe
from django.utils.translation import gettext, gettext_lazy
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",
on_delete=models.CASCADE,
)
trans_test = models.CharField(
max_length=200, blank=True, verbose_name=gettext("translation test")
)
trans_test_lazy = models.CharField(
max_length=200, blank=True, verbose_name=gettext_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, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField(null=True, blank=True)
foreign_key = GenericForeignKey()
friends = models.ManyToManyField("Person")
class Meta:
verbose_name = "person"
verbose_name_plural = "people"
def __str__(self):
return self.first_name
@property
def name(self):
return f"{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",)
class Group(models.Model):
name = models.CharField(max_length=200)
members = models.ManyToManyField("Person")
def __str__(self):
return self.name
def get_absolute_url(self):
return f"/group/{self.pk}/"
class Occupation(models.Model):
name = models.CharField(max_length=200)
region = models.ForeignKey("Region", null=True, on_delete=models.CASCADE)
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
class Region(models.Model):
name = models.CharField(max_length=200)
mayor = models.OneToOneField(Person, null=True, on_delete=models.CASCADE)
class Meta:
ordering = ["name"]
def __str__(self):
return self.name
class PersonInformation(models.Model):
person = models.ForeignKey(
Person, related_name="info_list", verbose_name="Information", on_delete=models.CASCADE
)
|