Я использую 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 и т.д.), но я не могу найти способ доступа к родительскому объекту, к которому привязана табличная строка. Есть ли способ сделать это?