0👍
So I couldn’t find a really clever way to do what I wanted with django admin’s custom methods. What I ended up doing now is implementing the admin’s change_view
, setting up my own form manually and performing all my custom initializations from there.
I then provided a custom template by setting change_form_template
, which is simply extending admin/change_form.html
but rendering my own form instead of the default one. I also set extra_context['adminform'] = None
so the default admin form gets removed.
That way I can now customize my form the way I need it to be but still use all the other admin conveniences. So far it seems to work very nicely. Not the very most elegant solution either I think, but the best I could think of.
1👍
Yes you are doing it wrong. In Django 1.2+ you can use get_readonly_fields.
From this answer:
The ModelAdmin is only instantiated once for all requests that it receives. So when you define the readonly fields like that, you’re setting it across the board permanently.
Regarding altering the queryset. From the documentation:
class MyModelAdmin(admin.ModelAdmin):
def queryset(self, request):
qs = super(MyModelAdmin, self).queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(author=request.user)
- [Answered ]-Django – submit multiple forms in a view
- [Answered ]-Custom django comments
- [Answered ]-How do I save to Django's database manually?
- [Answered ]-Django form geocoding – where to geocode, how to validate, how to pass geocode result
1👍
To expand on dan-klasson’s anwer: Do not ever set instance attributes in any ModelAdmin method (like self.readonly_fields
) to prevent issues like the one you described. Only use Django ModelAdmin’s options (which are class-level) or methods to manipulate any behavior. Regarding readonly fields, you can use the ModelAdmin.get_readonly_fields
method which has this signature: get_readonly_fields(self, request, obj=None)
.
- [Answered ]-Winzip cannot open an archive created by python shutil.make_archive on windows. On ubuntu archive manager does fine
- [Answered ]-Use django for one page on a website?
- [Answered ]-Django: AJAX and path params
- [Answered ]-Environment can only contain strings- wagtail CMS, Django