models.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. from django.db import connection, models
  2. from django.db.models.functions import Lower
  3. from django.utils.functional import SimpleLazyObject
  4. class People(models.Model):
  5. name = models.CharField(max_length=255)
  6. parent = models.ForeignKey("self", models.CASCADE)
  7. class Message(models.Model):
  8. from_field = models.ForeignKey(People, models.CASCADE, db_column="from_id")
  9. author = models.ForeignKey(People, models.CASCADE, related_name="message_authors")
  10. class PeopleData(models.Model):
  11. people_pk = models.ForeignKey(People, models.CASCADE, primary_key=True)
  12. ssn = models.CharField(max_length=11)
  13. class PeopleMoreData(models.Model):
  14. people_unique = models.ForeignKey(People, models.CASCADE, unique=True)
  15. message = models.ForeignKey(Message, models.CASCADE, blank=True, null=True)
  16. license = models.CharField(max_length=255)
  17. class ForeignKeyToField(models.Model):
  18. to_field_fk = models.ForeignKey(
  19. PeopleMoreData,
  20. models.CASCADE,
  21. to_field="people_unique",
  22. )
  23. class DigitsInColumnName(models.Model):
  24. all_digits = models.CharField(max_length=11, db_column="123")
  25. leading_digit = models.CharField(max_length=11, db_column="4extra")
  26. leading_digits = models.CharField(max_length=11, db_column="45extra")
  27. class SpecialName(models.Model):
  28. field = models.IntegerField(db_column="field")
  29. # Underscores
  30. field_field_0 = models.IntegerField(db_column="Field_")
  31. field_field_1 = models.IntegerField(db_column="Field__")
  32. field_field_2 = models.IntegerField(db_column="__field")
  33. # Other chars
  34. prc_x = models.IntegerField(db_column="prc(%) x")
  35. non_ascii = models.IntegerField(db_column="tamaño")
  36. class Meta:
  37. db_table = "inspectdb_special.table name"
  38. class PascalCaseName(models.Model):
  39. class Meta:
  40. db_table = "inspectdb_pascal.PascalCase"
  41. class ColumnTypes(models.Model):
  42. id = models.AutoField(primary_key=True)
  43. big_int_field = models.BigIntegerField()
  44. bool_field = models.BooleanField(default=False)
  45. null_bool_field = models.BooleanField(null=True)
  46. char_field = models.CharField(max_length=10)
  47. null_char_field = models.CharField(max_length=10, blank=True, null=True)
  48. date_field = models.DateField()
  49. date_time_field = models.DateTimeField()
  50. decimal_field = models.DecimalField(max_digits=6, decimal_places=1)
  51. email_field = models.EmailField()
  52. file_field = models.FileField(upload_to="unused")
  53. file_path_field = models.FilePathField()
  54. float_field = models.FloatField()
  55. int_field = models.IntegerField()
  56. gen_ip_address_field = models.GenericIPAddressField(protocol="ipv4")
  57. pos_big_int_field = models.PositiveBigIntegerField()
  58. pos_int_field = models.PositiveIntegerField()
  59. pos_small_int_field = models.PositiveSmallIntegerField()
  60. slug_field = models.SlugField()
  61. small_int_field = models.SmallIntegerField()
  62. text_field = models.TextField()
  63. time_field = models.TimeField()
  64. url_field = models.URLField()
  65. uuid_field = models.UUIDField()
  66. class JSONFieldColumnType(models.Model):
  67. json_field = models.JSONField()
  68. null_json_field = models.JSONField(blank=True, null=True)
  69. class Meta:
  70. required_db_features = {
  71. "can_introspect_json_field",
  72. "supports_json_field",
  73. }
  74. test_collation = SimpleLazyObject(
  75. lambda: connection.features.test_collations.get("non_default")
  76. )
  77. class CharFieldDbCollation(models.Model):
  78. char_field = models.CharField(max_length=10, db_collation=test_collation)
  79. class Meta:
  80. required_db_features = {"supports_collation_on_charfield"}
  81. class TextFieldDbCollation(models.Model):
  82. text_field = models.TextField(db_collation=test_collation)
  83. class Meta:
  84. required_db_features = {"supports_collation_on_textfield"}
  85. class CharFieldUnlimited(models.Model):
  86. char_field = models.CharField(max_length=None)
  87. class Meta:
  88. required_db_features = {"supports_unlimited_charfield"}
  89. class UniqueTogether(models.Model):
  90. field1 = models.IntegerField()
  91. field2 = models.CharField(max_length=10)
  92. from_field = models.IntegerField(db_column="from")
  93. non_unique = models.IntegerField(db_column="non__unique_column")
  94. non_unique_0 = models.IntegerField(db_column="non_unique__column")
  95. class Meta:
  96. unique_together = [
  97. ("field1", "field2"),
  98. ("from_field", "field1"),
  99. ("non_unique", "non_unique_0"),
  100. ]
  101. class FuncUniqueConstraint(models.Model):
  102. name = models.CharField(max_length=255)
  103. rank = models.IntegerField()
  104. class Meta:
  105. constraints = [
  106. models.UniqueConstraint(
  107. Lower("name"), models.F("rank"), name="index_lower_name"
  108. )
  109. ]
  110. required_db_features = {"supports_expression_indexes"}
  111. class DbComment(models.Model):
  112. rank = models.IntegerField(db_comment="'Rank' column comment")
  113. class Meta:
  114. db_table_comment = "Custom table comment"
  115. required_db_features = {"supports_comments"}