#34877: KeyError for output_field in GeneratedField
-------------------------------------+-------------------------------------
               Reporter:  Paolo      |          Owner:  nobody
  Melchiorre                         |
                   Type:  Bug        |         Status:  new
              Component:  Database   |        Version:  5.0
  layer (models, ORM)                |
               Severity:  Release    |       Keywords:  field, database,
  blocker                            |  generated, output_field
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 Trying to get SQL code for a migrations I receive a `KeyEorr`

 **Model**

 {{{#!python
 from decimal import Decimal
 from django.db import models
 from django.db.models import F, Value as V
 from django.db.models.functions import Round

 class Item(models.Model):
     price = models.DecimalField(max_digits=7, decimal_places=2)
     vat_price = models.GeneratedField(
         db_persist=True,
         expression=Round(F("price") * V(Decimal("1.22")), 2),
         output_field=models.DecimalField(max_digits=8, decimal_places=2),
     )
 }}}

 **Step**

 {{{#!bash
 $ python -m manage makemigrations
 $ python -m manage sqlmigrate shop 0001
 }}}

 **Traceback**

 {{{#!pycon
 Traceback (most recent call last):
   File "<frozen runpy>", line 198, in _run_module_as_main
   File "<frozen runpy>", line 88, in _run_code
   File "/home/paulox/Projects/generatedfield/manage.py", line 22, in
 <module>
     main()
   File "/home/paulox/Projects/generatedfield/manage.py", line 18, in main
     execute_from_command_line(sys.argv)
   File "/home/paulox/Projects/generatedfield/.venv/lib/python3.11/site-
 packages/django/core/management/__init__.py", line 442, in
 execute_from_command_line
     utility.execute()
   File "/home/paulox/Projects/generatedfield/.venv/lib/python3.11/site-
 packages/django/core/management/__init__.py", line 436, in execute
     self.fetch_command(subcommand).run_from_argv(self.argv)
   File "/home/paulox/Projects/generatedfield/.venv/lib/python3.11/site-
 packages/django/core/management/base.py", line 412, in run_from_argv
     self.execute(*args, **cmd_options)
   File "/home/paulox/Projects/generatedfield/.venv/lib/python3.11/site-
 packages/django/core/management/commands/sqlmigrate.py", line 38, in
 execute
     return super().execute(*args, **options)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/home/paulox/Projects/generatedfield/.venv/lib/python3.11/site-
 packages/django/core/management/base.py", line 458, in execute
     output = self.handle(*args, **options)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/home/paulox/Projects/generatedfield/.venv/lib/python3.11/site-
 packages/django/core/management/commands/sqlmigrate.py", line 80, in
 handle
     sql_statements = loader.collect_sql(plan)
                      ^^^^^^^^^^^^^^^^^^^^^^^^
   File "/home/paulox/Projects/generatedfield/.venv/lib/python3.11/site-
 packages/django/db/migrations/loader.py", line 381, in collect_sql
     state = migration.apply(state, schema_editor, collect_sql=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/home/paulox/Projects/generatedfield/.venv/lib/python3.11/site-
 packages/django/db/migrations/migration.py", line 132, in apply
     operation.database_forwards(
   File "/home/paulox/Projects/generatedfield/.venv/lib/python3.11/site-
 packages/django/db/migrations/operations/models.py", line 96, in
 database_forwards
     schema_editor.create_model(model)
   File "/home/paulox/Projects/generatedfield/.venv/lib/python3.11/site-
 packages/django/db/backends/base/schema.py", line 506, in create_model
     self.deferred_sql.extend(self._model_indexes_sql(model))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/home/paulox/Projects/generatedfield/.venv/lib/python3.11/site-
 packages/django/db/backends/base/schema.py", line 1595, in
 _model_indexes_sql
     output.extend(self._field_indexes_sql(model, field))
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/home/paulox/Projects/generatedfield/.venv/lib/python3.11/site-
 packages/django/db/backends/postgresql/schema.py", line 63, in
 _field_indexes_sql
     like_index_statement = self._create_like_index_sql(model, field)
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/home/paulox/Projects/generatedfield/.venv/lib/python3.11/site-
 packages/django/db/backends/postgresql/schema.py", line 88, in
 _create_like_index_sql
     db_type = field.db_type(connection=self.connection)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/home/paulox/Projects/generatedfield/.venv/lib/python3.11/site-
 packages/django/db/models/fields/__init__.py", line 879, in db_type
     return column_type % data
            ~~~~~~~~~~~~^~~~~~
   File "/home/paulox/Projects/generatedfield/.venv/lib/python3.11/site-
 packages/django/utils/datastructures.py", line 280, in __getitem__
     value = super().__getitem__(key)
             ^^^^^^^^^^^^^^^^^^^^^^^^
 KeyError: 'max_digits'
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/34877>
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/0107018ad7d24178-b10d8ced-c95f-4b0a-ae86-df237393d299-000000%40eu-central-1.amazonses.com.

Reply via email to