Я использую TabularInline в админке Django, настроенный для отображения одной дополнительной пустой формы.
class MyChildInline(admin.TabularInline):
model = MyChildModel
form = MyChildInlineForm
extra = 1
Модель выглядит как MyParentModel-> MyChildModel-> MyInlineForm.
Я использую настраиваемую форму, поэтому могу динамически искать значения и вводить варианты выбора в поле. например
class MyChildInlineForm(ModelForm):
my_choice_field = forms.ChoiceField()
def __init__(self, *args, **kwargs):
super(MyChildInlineForm, self).__init__(*args, **kwargs)
# Lookup ID of parent model.
parent_id = None
if "parent_id" in kwargs:
parent_id = kwargs.pop("parent_id")
elif self.instance.parent_id:
parent_id = self.instance.parent_id
elif self.is_bound:
parent_id = self.data['%s-parent'% self.prefix]
if parent_id:
parent = MyParentModel.objects.get(id=parent_id)
if rev:
qs = parent.get_choices()
self.fields['my_choice_field'].choices = [(r.name,r.value) for r in qs]
Это отлично работает для встроенных записей, привязанных к фактической записи, но для дополнительной пустой формы в моем поле выбора не отображаются никакие значения, так как у нее нет идентификатора записи и поиск невозможен. связанная запись MyParentModel.
Я проверил все значения, которые смог найти (args, kwargs, self.data, self.instance и т. Д.), Но не могу найти никакого способа получить доступ к родительскому объекту, к которому привязан табличный inline. Есть ли способ сделать это?