models.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. from django.db import models
  2. class Product(models.Model):
  3. price = models.IntegerField(null=True)
  4. discounted_price = models.IntegerField(null=True)
  5. class Meta:
  6. required_db_features = {
  7. 'supports_table_check_constraints',
  8. }
  9. constraints = [
  10. models.CheckConstraint(
  11. check=models.Q(price__gt=models.F('discounted_price')),
  12. name='price_gt_discounted_price',
  13. ),
  14. models.CheckConstraint(
  15. check=models.Q(price__gt=0),
  16. name='%(app_label)s_%(class)s_price_gt_0',
  17. ),
  18. models.CheckConstraint(
  19. check=models.expressions.RawSQL(
  20. 'price < %s', (1000,), output_field=models.BooleanField()
  21. ),
  22. name='%(app_label)s_price_lt_1000_raw',
  23. ),
  24. models.CheckConstraint(
  25. check=models.expressions.ExpressionWrapper(
  26. models.Q(price__gt=500) | models.Q(price__lt=500),
  27. output_field=models.BooleanField()
  28. ),
  29. name='%(app_label)s_price_neq_500_wrap',
  30. ),
  31. ]
  32. class UniqueConstraintProduct(models.Model):
  33. name = models.CharField(max_length=255)
  34. color = models.CharField(max_length=32, null=True)
  35. class Meta:
  36. constraints = [
  37. models.UniqueConstraint(fields=['name', 'color'], name='name_color_uniq'),
  38. ]
  39. class UniqueConstraintConditionProduct(models.Model):
  40. name = models.CharField(max_length=255)
  41. color = models.CharField(max_length=32, null=True)
  42. class Meta:
  43. required_db_features = {'supports_partial_indexes'}
  44. constraints = [
  45. models.UniqueConstraint(
  46. fields=['name'],
  47. name='name_without_color_uniq',
  48. condition=models.Q(color__isnull=True),
  49. ),
  50. ]
  51. class UniqueConstraintDeferrable(models.Model):
  52. name = models.CharField(max_length=255)
  53. shelf = models.CharField(max_length=31)
  54. class Meta:
  55. required_db_features = {
  56. 'supports_deferrable_unique_constraints',
  57. }
  58. constraints = [
  59. models.UniqueConstraint(
  60. fields=['name'],
  61. name='name_init_deferred_uniq',
  62. deferrable=models.Deferrable.DEFERRED,
  63. ),
  64. models.UniqueConstraint(
  65. fields=['shelf'],
  66. name='sheld_init_immediate_uniq',
  67. deferrable=models.Deferrable.IMMEDIATE,
  68. ),
  69. ]
  70. class UniqueConstraintInclude(models.Model):
  71. name = models.CharField(max_length=255)
  72. color = models.CharField(max_length=32, null=True)
  73. class Meta:
  74. required_db_features = {
  75. 'supports_table_check_constraints',
  76. 'supports_covering_indexes',
  77. }
  78. constraints = [
  79. models.UniqueConstraint(
  80. fields=['name'],
  81. name='name_include_color_uniq',
  82. include=['color'],
  83. ),
  84. ]
  85. class AbstractModel(models.Model):
  86. age = models.IntegerField()
  87. class Meta:
  88. abstract = True
  89. required_db_features = {
  90. 'supports_table_check_constraints',
  91. }
  92. constraints = [
  93. models.CheckConstraint(
  94. check=models.Q(age__gte=18),
  95. name='%(app_label)s_%(class)s_adult',
  96. ),
  97. ]
  98. class ChildModel(AbstractModel):
  99. pass