Opened 7 hours ago

Last modified 57 minutes ago

#37168 assigned Bug

Readonly fields with db_default display DatabaseDefault representation

Reported by: Mariusz Felisiak Owned by: Mariusz Felisiak
Component: Forms Version: 6.0
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Mariusz Felisiak)

Readonly fields with db_default display DatabaseDefault() representation in the admin. For example:

  • models.py
    class MyModel(models.Model):
        uuid = models.UUIDField(db_default=UUID7(), editable=False, primary_key=True)
        created_datetime = models.DateTimeField(db_default=Now(), editable=False)
        modified_datetime = models.DateTimeField(db_default=Now(), editable=False)
        name = models.TextField()
    
  • admin.py
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    readonly_fields = ["uuid", "created_datetime", "modified_datetime"]


I think they should be consider as any other empty values.

Attachments (1)

Screenshot_20260613_125111.png (41.8 KB ) - added by Mariusz Felisiak 7 hours ago.

Download all attachments as: .zip

Change History (3)

by Mariusz Felisiak, 7 hours ago

comment:1 by Mariusz Felisiak, 6 hours ago

Description: modified (diff)

comment:2 by Mariusz Felisiak, 75 minutes ago

We wanted to add DatabaseDefault() to the list of Field.empty_values and modify its __hash__ and __eq__. Unfortunately, expression is required to initialize DatabaseDefault and, TBH, DatabaseDefaults with different expression should not be consider equal. I'm thinking about adding is_value_empty() hook to the models.Field:

def is_value_empty(self, value):
    return value in self.empty_values or isinstance(value, DatabaseDefault):

and reusing it everywhere we currently check if value in self.empty_values.

Last edited 57 minutes ago by Mariusz Felisiak (previous) (diff)
Note: See TracTickets for help on using tickets.
Back to Top