Opened 5 years ago
Closed 5 years ago
#32597 closed Bug (needsinfo)
generic inline formsets: object has no attribute 'fk'
| Reported by: | Éric Tanter | Owned by: | nobody |
|---|---|---|---|
| Component: | Forms | Version: | 2.2 |
| Severity: | Normal | Keywords: | generic field, inline formset |
| 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 )
Hi,
I think I'm facing a zombie-bug reminiscent of ticket #9498:
https://code.djangoproject.com/ticket/9498
From 12 years ago and marked as solved.
The setting is simple: I have a model with a generic field (with non-standard names). The corresponding inline class declares the ct_field and ct_fk_field as required.
If I don't try to customize the formset, then all works fine. However, as soon as I declare a formset attribute for the inline (even if I use formset=BaseInlineFormSet), it crashes with an error:
type object 'DocumentFormSet' has no attribute 'fk'
With the debugger I traced the problem down to the execution of this method in BaseInlineFormSet (during the initialization process of the formsets):
@classmethod def get_default_prefix(cls): return cls.fk.remote_field.get_accessor_name(model=cls.model).replace('+', '')
Problem is: cls has no field fk (it has ct_fk_field and ct_field properly set, though).
I've done the following "fix":
- redefine the get_default_prefix method to use
ct_fieldinstead offk
@classmethod def get_default_prefix(cls): return cls.ct_field.remote_field.get_accessor_name(model=cls.model).replace('+', '')
- at the instance methods level, I then had the same errors (
no attribute 'fk'), so I defined:
@property def fk(self): return self.ct_field
And it works (I tried defining an empty_form property to set an initial value of my inlines, and it behaves as expected.
Is that a known bug of 2.2? is it fixed upstream? Or am I missing something and there's some documentation somewhere explaining what to do in that case? (my fix is clearly not intended for users to do, I believe).
Thanks
Éric
Change History (3)
comment:1 by , 5 years ago
| Description: | modified (diff) |
|---|
comment:2 by , 5 years ago
comment:3 by , 5 years ago
| Resolution: | → needsinfo |
|---|---|
| Status: | new → closed |
Hi, you should provide a minimal example to reproduce the problem and confirm that the issue still exists on the master branch.