【发布时间】:2012-03-14 10:19:16
【问题描述】:
我在 Django 的管理员中使用 TabularInline,配置为显示一个额外的空白表单。
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]
这适用于绑定到实际记录的内联记录,但对于额外的空白表单,它不会在我的选择字段中显示任何值,因为它没有任何记录 ID 并且无法查找关联的 MyParentModel 记录。
我检查了我能找到的所有值(args、kwargs、self.data、self.instance 等),但我找不到任何方法来访问表格内联绑定到的父对象。有没有办法做到这一点?
【问题讨论】:
标签: python django django-models django-forms