Opened 7 years ago

Closed 7 years ago

#7280 closed (invalid)

newforms-admin fields marked "editable=False" raise error when used in "prepoluated_fields"

Reported by: peschler Owned by: nobody
Component: contrib.admin Version: newforms-admin
Severity: Keywords: newforms-admin editable prepopulated_fields
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

Description

Consider the following model and the associated ModelAdmin (shortened for demonstration):

class Menu(models.Model):
    name = models.CharField(max_length=50, unique=True)
    slug = models.SlugField(editable=False)
    # ...

class MenuOptions(admin.ModelAdmin):
    prepopulated_fields = {'slug': ('name',)}
    display_list = ('name', 'slug',)    
admin.site.register(Menu, MenuOptions)

The slug field should not be editable by a user but rather is updated in the save() method of the model everytime the name of the menu changes.
Now when I try to open the (newforms) admin page for adding a new Menu instance I get the following error:

KeyError at /admin/newnavigation/menu/add/
"Key 'slug' not found in Form"

The error disappears as soon I exchange "editable=False" with "editable=True" or remove the slug from the prepoluated_fields.
Seems there is a problem when using a field marked editable=False in the ModelAdmin's prepopulated_fields.

In my use case I can simply remove slug from the prepopulated_fields because I populate it manually, but there might be some cases where such a simple fix is not possible.

Change History (1)

comment:1 Changed 7 years ago by brosner

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Resolution set to invalid
  • Status changed from new to closed

This is the expected behavior. prepopulated_fields requires that the fields you specify in both the key and value tuple to be present in the form. prepopulated_fields will not magically write functionality in the your model's save method. It provides some Javascript to deal with it on the user interface also allowing the user to override the automatically generated value. Please take this to django-users mailing list and/or #django on freenode.

Note: See TracTickets for help on using tickets.
Back to Top