2
0

models.py 4.8 KB

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