models.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. from urllib.parse import quote
  2. from django.contrib.contenttypes.fields import (
  3. GenericForeignKey, GenericRelation,
  4. )
  5. from django.contrib.contenttypes.models import ContentType
  6. from django.contrib.sites.models import SiteManager
  7. from django.db import models
  8. class Site(models.Model):
  9. domain = models.CharField(max_length=100)
  10. objects = SiteManager()
  11. def __str__(self):
  12. return self.domain
  13. class Author(models.Model):
  14. name = models.CharField(max_length=100)
  15. def __str__(self):
  16. return self.name
  17. def get_absolute_url(self):
  18. return '/authors/%s/' % self.id
  19. class Article(models.Model):
  20. title = models.CharField(max_length=100)
  21. slug = models.SlugField()
  22. author = models.ForeignKey(Author, models.CASCADE)
  23. date_created = models.DateTimeField()
  24. def __str__(self):
  25. return self.title
  26. class SchemeIncludedURL(models.Model):
  27. url = models.URLField(max_length=100)
  28. def __str__(self):
  29. return self.url
  30. def get_absolute_url(self):
  31. return self.url
  32. class ConcreteModel(models.Model):
  33. name = models.CharField(max_length=10)
  34. class ProxyModel(ConcreteModel):
  35. class Meta:
  36. proxy = True
  37. class FooWithoutUrl(models.Model):
  38. """
  39. Fake model not defining ``get_absolute_url`` for
  40. ContentTypesTests.test_shortcut_view_without_get_absolute_url()
  41. """
  42. name = models.CharField(max_length=30, unique=True)
  43. def __str__(self):
  44. return self.name
  45. class FooWithUrl(FooWithoutUrl):
  46. """
  47. Fake model defining ``get_absolute_url`` for
  48. ContentTypesTests.test_shortcut_view().
  49. """
  50. def get_absolute_url(self):
  51. return "/users/%s/" % quote(self.name)
  52. class FooWithBrokenAbsoluteUrl(FooWithoutUrl):
  53. """
  54. Fake model defining a ``get_absolute_url`` method containing an error
  55. """
  56. def get_absolute_url(self):
  57. return "/users/%s/" % self.unknown_field
  58. class Question(models.Model):
  59. text = models.CharField(max_length=200)
  60. answer_set = GenericRelation('Answer')
  61. class Answer(models.Model):
  62. text = models.CharField(max_length=200)
  63. content_type = models.ForeignKey(ContentType, models.CASCADE)
  64. object_id = models.PositiveIntegerField()
  65. question = GenericForeignKey()
  66. class Meta:
  67. order_with_respect_to = 'question'
  68. def __str__(self):
  69. return self.text
  70. class Post(models.Model):
  71. """An ordered tag on an item."""
  72. title = models.CharField(max_length=200)
  73. content_type = models.ForeignKey(ContentType, models.CASCADE, null=True)
  74. object_id = models.PositiveIntegerField(null=True)
  75. parent = GenericForeignKey()
  76. children = GenericRelation('Post')
  77. class Meta:
  78. order_with_respect_to = 'parent'
  79. def __str__(self):
  80. return self.title
  81. class ModelWithNullFKToSite(models.Model):
  82. title = models.CharField(max_length=200)
  83. site = models.ForeignKey(Site, null=True, on_delete=models.CASCADE)
  84. post = models.ForeignKey(Post, null=True, on_delete=models.CASCADE)
  85. def __str__(self):
  86. return self.title
  87. def get_absolute_url(self):
  88. return '/title/%s/' % quote(self.title)