Opened 10 years ago

Last modified 10 years ago

#23501 new Bug

remove/add fields programatically in modelform fails in admin — at Initial Version

Reported by: hadisunyoto Owned by: nobody
Component: contrib.admin Version: 1.7
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

model:

class Thickness(models.Model):
    value = models.DecimalField(primary_key=True, max_digits=7, decimal_places=2)
    is_active = models.BooleanField()

model form:

class ThicknessForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(ThicknessForm, self).__init__(*args, **kwargs)
        instance = getattr(self, 'instance', None)

        # edit
        if instance and instance.pk:
            del self.fields['value']
        else:
            del self.fields['is_active']

    class Meta:
        model = Thickness
        fields = '__all__'

admin:

class ThicknessAdmin(admin.ModelAdmin):
    list_display = ('value', 'is_active')
    form = ThicknessForm

admin.site.register(Thickness, ThicknessAdmin)

refresh page, go to admin->Thickness, create one:

KeyError at /admin/thicknesses/thickness/add/
"Key 'is_active' not found in 'ThicknessForm'"
...

Error during template rendering

In template D:\env\lib\site-packages\django\contrib\admin\templates\admin\includes\fieldset.html, error at line 7

The highlighted line is number 7

6 {% for line in fieldset %}
7 <div class="form-row{% if line.fields|length_is:'1' and line.errors %} errors{% endif %}{% if not line.has_visible_field %} hidden{% endif %}{% for field in line %}{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% endfor %}">
8 {% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %}

go to admin->Thickness again, modify one (without using model form):
KeyError at /admin/thicknesses/thickness/0.55/
"Key 'value' not found in 'ThicknessForm'"
...

same error as above

Without admin, model form works as expected, it remove is_active when create, and it remove value when edit

Change History (0)

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