#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 [email protected].
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