models.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import datetime
  2. import uuid
  3. from decimal import Decimal
  4. from django.db import models
  5. from django.db.models.functions import Now
  6. from django.utils import timezone
  7. try:
  8. from PIL import Image
  9. except ImportError:
  10. Image = None
  11. class Country(models.Model):
  12. name = models.CharField(max_length=255)
  13. iso_two_letter = models.CharField(max_length=2)
  14. description = models.TextField()
  15. class Meta:
  16. constraints = [
  17. models.UniqueConstraint(
  18. fields=["iso_two_letter", "name"],
  19. name="country_name_iso_unique",
  20. ),
  21. ]
  22. class ProxyCountry(Country):
  23. class Meta:
  24. proxy = True
  25. class ProxyProxyCountry(ProxyCountry):
  26. class Meta:
  27. proxy = True
  28. class ProxyMultiCountry(ProxyCountry):
  29. pass
  30. class ProxyMultiProxyCountry(ProxyMultiCountry):
  31. class Meta:
  32. proxy = True
  33. class Place(models.Model):
  34. name = models.CharField(max_length=100)
  35. class Meta:
  36. abstract = True
  37. class Restaurant(Place):
  38. pass
  39. class Pizzeria(Restaurant):
  40. pass
  41. class State(models.Model):
  42. two_letter_code = models.CharField(max_length=2, primary_key=True)
  43. class TwoFields(models.Model):
  44. f1 = models.IntegerField(unique=True)
  45. f2 = models.IntegerField(unique=True)
  46. name = models.CharField(max_length=15, null=True)
  47. class FieldsWithDbColumns(models.Model):
  48. rank = models.IntegerField(unique=True, db_column="rAnK")
  49. name = models.CharField(max_length=15, null=True, db_column="oTheRNaMe")
  50. class UpsertConflict(models.Model):
  51. number = models.IntegerField(unique=True)
  52. rank = models.IntegerField()
  53. name = models.CharField(max_length=15)
  54. class NoFields(models.Model):
  55. pass
  56. class SmallAutoFieldModel(models.Model):
  57. id = models.SmallAutoField(primary_key=True)
  58. class BigAutoFieldModel(models.Model):
  59. id = models.BigAutoField(primary_key=True)
  60. class NullableFields(models.Model):
  61. # Fields in db.backends.oracle.BulkInsertMapper
  62. big_int_filed = models.BigIntegerField(null=True, default=1)
  63. binary_field = models.BinaryField(null=True, default=b"data")
  64. date_field = models.DateField(null=True, default=timezone.now)
  65. datetime_field = models.DateTimeField(null=True, default=timezone.now)
  66. decimal_field = models.DecimalField(
  67. null=True, max_digits=2, decimal_places=1, default=Decimal("1.1")
  68. )
  69. duration_field = models.DurationField(null=True, default=datetime.timedelta(1))
  70. float_field = models.FloatField(null=True, default=3.2)
  71. integer_field = models.IntegerField(null=True, default=2)
  72. null_boolean_field = models.BooleanField(null=True, default=False)
  73. positive_big_integer_field = models.PositiveBigIntegerField(
  74. null=True, default=2**63 - 1
  75. )
  76. positive_integer_field = models.PositiveIntegerField(null=True, default=3)
  77. positive_small_integer_field = models.PositiveSmallIntegerField(
  78. null=True, default=4
  79. )
  80. small_integer_field = models.SmallIntegerField(null=True, default=5)
  81. time_field = models.TimeField(null=True, default=timezone.now)
  82. auto_field = models.ForeignKey(NoFields, on_delete=models.CASCADE, null=True)
  83. small_auto_field = models.ForeignKey(
  84. SmallAutoFieldModel, on_delete=models.CASCADE, null=True
  85. )
  86. big_auto_field = models.ForeignKey(
  87. BigAutoFieldModel, on_delete=models.CASCADE, null=True
  88. )
  89. # Fields not required in BulkInsertMapper
  90. char_field = models.CharField(null=True, max_length=4, default="char")
  91. email_field = models.EmailField(null=True, default="user@example.com")
  92. file_field = models.FileField(null=True, default="file.txt")
  93. file_path_field = models.FilePathField(path="/tmp", null=True, default="file.txt")
  94. generic_ip_address_field = models.GenericIPAddressField(
  95. null=True, default="127.0.0.1"
  96. )
  97. if Image:
  98. image_field = models.ImageField(null=True, default="image.jpg")
  99. slug_field = models.SlugField(null=True, default="slug")
  100. text_field = models.TextField(null=True, default="text")
  101. url_field = models.URLField(null=True, default="/")
  102. uuid_field = models.UUIDField(null=True, default=uuid.uuid4)
  103. class RelatedModel(models.Model):
  104. name = models.CharField(max_length=15, null=True)
  105. country = models.OneToOneField(Country, models.CASCADE, primary_key=True)
  106. big_auto_fields = models.ManyToManyField(BigAutoFieldModel)
  107. class DbDefaultModel(models.Model):
  108. name = models.CharField(max_length=10)
  109. created_at = models.DateTimeField(db_default=Now())