models.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. """
  2. Callable defaults
  3. You can pass callable objects as the ``default`` parameter to a field. When
  4. the object is created without an explicit value passed in, Django will call
  5. the method to determine the default value.
  6. This example uses ``datetime.datetime.now`` as the default for the ``pub_date``
  7. field.
  8. """
  9. from datetime import datetime
  10. from django.db import models
  11. from django.db.models.functions import Coalesce, ExtractYear, Now, Pi
  12. from django.db.models.lookups import GreaterThan
  13. class Article(models.Model):
  14. headline = models.CharField(max_length=100, default="Default headline")
  15. pub_date = models.DateTimeField(default=datetime.now)
  16. def __str__(self):
  17. return self.headline
  18. class DBArticle(models.Model):
  19. """
  20. Values or expressions can be passed as the db_default parameter to a field.
  21. When the object is created without an explicit value passed in, the
  22. database will insert the default value automatically.
  23. """
  24. headline = models.CharField(max_length=100, db_default="Default headline")
  25. pub_date = models.DateTimeField(db_default=Now())
  26. class Meta:
  27. required_db_features = {"supports_expression_defaults"}
  28. class DBDefaults(models.Model):
  29. both = models.IntegerField(default=1, db_default=2)
  30. null = models.FloatField(null=True, db_default=1.1)
  31. class DBDefaultsFunction(models.Model):
  32. number = models.FloatField(db_default=Pi())
  33. year = models.IntegerField(db_default=ExtractYear(Now()))
  34. added = models.FloatField(db_default=Pi() + 4.5)
  35. multiple_subfunctions = models.FloatField(db_default=Coalesce(4.5, Pi()))
  36. case_when = models.IntegerField(
  37. db_default=models.Case(models.When(GreaterThan(2, 1), then=3), default=4)
  38. )
  39. class Meta:
  40. required_db_features = {"supports_expression_defaults"}
  41. class DBDefaultsPK(models.Model):
  42. language_code = models.CharField(primary_key=True, max_length=2, db_default="en")
  43. class DBDefaultsFK(models.Model):
  44. language_code = models.ForeignKey(
  45. DBDefaultsPK, db_default="fr", on_delete=models.CASCADE
  46. )