#28673: Make null=True explicitly uncombinable with auto_now=True
-------------------------------------+-------------------------------------
               Reporter:  Дилян      |          Owner:  nobody
  Палаузов                           |
                   Type:             |         Status:  new
  Uncategorized                      |
              Component:  Database   |        Version:  1.11
  layer (models, ORM)                |
               Severity:  Normal     |       Keywords:
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 {{{
 diff --git a/django/db/models/fields/__init__.py
 b/django/db/models/fields/__init__.py
 --- a/django/db/models/fields/__init__.py
 +++ b/django/db/models/fields/__init__.py
 @@ -1147,6 +1147,13 @@ class DateTimeCheckMixin(object):
          # auto_now, auto_now_add, and default are mutually exclusive
          # options. The use of more than one of these options together
          # will trigger an Error
 +        if self.auto_now and self.null:
 +            return [
 +                checks.Error(
 +                   "The option null=True cannot be used with auto_now.",
 +                   obj=self,
 +                   id='fields.E161',
 +                )]
          mutually_exclusive_options = [self.auto_now_add, self.auto_now,
 self.has_default()]
          enabled_options = [option not in (None, False) for option in
 mutually_exclusive_options].count(True)
          if enabled_options > 1:
 diff --git a/docs/ref/checks.txt b/docs/ref/checks.txt
 --- a/docs/ref/checks.txt
 +++ b/docs/ref/checks.txt
 @@ -167,6 +167,7 @@ Model fields
    null values are not allowed, as blank values are stored as nulls.
  * **fields.E160**: The options ``auto_now``, ``auto_now_add``, and
 ``default``
    are mutually exclusive. Only one of these options may be present.
 +* **fields.E161**: ``null=True`` cannot be used with ``auto_now``.
  * **fields.W161**: Fixed default value provided.
  * **fields.E900**: ``IPAddressField`` has been removed except for support
 in
    historical migrations.
 diff --git a/docs/ref/models/fields.txt b/docs/ref/models/fields.txt
 --- a/docs/ref/models/fields.txt
 +++ b/docs/ref/models/fields.txt
 @@ -503,7 +503,8 @@ optional arguments:

      Automatically set the field to now every time the object is saved.
 Useful
      for "last-modified" timestamps. Note that the current date is
 *always*
 -    used; it's not just a default value that you can override.
 +    used; it's not just a default value that you can override, hence this
 cannot
 +    be combined with ``null=True``.

      The field is only automatically updated when calling
 :meth:`Model.save()
      <django.db.models.Model.save>`. The field isn't updated when making
 updates
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/28673>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/057.00ce614be15205181fcbc9a0c568dfe7%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to