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):
{{{#!python
@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).
In fact, the instance of `BaseInlineFormSet` has a field `fk`, used in
many instance methods, but the class itself does not :-(
I've done the following "fix":
1. redefine the get_default_prefix method to use `ct_field` instead of
`fk`
{{{#!python
@classmethod
def get_default_prefix(cls):
return
cls.ct_field.remote_field.get_accessor_name(model=cls.model).replace('+',
'')
}}}
2. at the instance methods level, I then had the same errors (`no
attribute 'fk'`), so I defined:
{{{#!python
@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
--
Ticket URL: <https://code.djangoproject.com/ticket/32597>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
Old description:
New description:
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):
{{{#!python
@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":
1. redefine the get_default_prefix method to use `ct_field` instead of
`fk`
{{{#!python
@classmethod
def get_default_prefix(cls):
return
cls.ct_field.remote_field.get_accessor_name(model=cls.model).replace('+',
'')
}}}
2. at the instance methods level, I then had the same errors (`no
attribute 'fk'`), so I defined:
{{{#!python
@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
--
--
Ticket URL: <https://code.djangoproject.com/ticket/32597#comment:1>
Comment (by Tim Graham):
Hi, you should provide a minimal example to reproduce the problem and
confirm that the issue still exists on the master branch.
--
Ticket URL: <https://code.djangoproject.com/ticket/32597#comment:2>
* status: new => closed
* resolution: => needsinfo
--
Ticket URL: <https://code.djangoproject.com/ticket/32597#comment:3>