Opened 10 years ago
Closed 10 years ago
#21967 closed Cleanup/optimization (fixed)
ModelFormMixin have extra logic in get_form_kwargs that crash view
Reported by: | Owned by: | Ryan Kaskel | |
---|---|---|---|
Component: | Generic views | Version: | dev |
Severity: | Normal | Keywords: | generic edit ModelFormMixin |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | yes | UI/UX: | no |
Description
When view inherit FormView and ModelFormMixin, have correct form_class and model fields, view will crash with AttributeError at /
'AddNoteView' object has no attribute 'object'
in this code:
class ModelFormMixin: .... def get_form_kwargs(self): """ Returns the keyword arguments for instantiating the form. """ kwargs = super(ModelFormMixin, self).get_form_kwargs() kwargs.update({'instance': self.object}) return kwargs
It's due to accessing to self.object before form.save(). Even in get request, when object can't be exist.
To check this you need inherit from FormView and ModelFormMixin:
class AddNoteView(FormView, ModelFormMixin):
template_name = 'notes.html'
form_class = NoteForm
success_url = reverse_lazy('index')
model = Note
Attachments (1)
Change History (5)
Changed 10 years ago by
Attachment: | Untitled.png added |
---|
comment:1 Changed 10 years ago by
Easy pickings: | set |
---|---|
Triage Stage: | Unreviewed → Accepted |
Type: | Bug → Cleanup/optimization |
Version: | 1.6 → master |
Hi,
If you're combining ModelFormMixin
and FormView
, I think you'd be better off using a CreateView
.
And if you find yourself writing complex code, it might be a sign that it's time to drop Django's generic mixins and write your own view from scratch (inheriting from View
).
Having said that, the implementation of ModelFormMixin.get_form_class
has some code that makes sure self.object
exists so for consistency's sake, I'll mark this as accepted.
The change is pretty straightforward so I'll also mark the ticket as easy picking
.
Thanks.
comment:2 Changed 10 years ago by
Owner: | changed from nobody to Ryan Kaskel |
---|---|
Status: | new → assigned |
comment:3 Changed 10 years ago by
Has patch: | set |
---|
Fixed here: https://github.com/django/django/pull/2248
comment:4 Changed 10 years ago by
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
screenshot of traceback