我已经读了很多书,但似乎无法找到解决方案。
我正在用Django写一个应用程序,我仍然在写管理端。
我有一个名为“Environments”的模型和一个名为“Servers”的模型,服务器和环境之间有一个ForeignKey关系,例如给定的环境有多个服务器。
在管理界面中为环境修改“添加”表单时,我使用内联表单来可视化将与该环境关联的服务器列表,如下所示:
class ServerInline(admin.TabularInline):
model = Server
extra = 39
class EnvironmentAdmin(admin.ModelAdmin):
inlines = [ServerInline]
很简单吧?
我想做的是使用默认值预填充服务器内联表单,我已经能够使用相同的值预填充它们:
class ServerInlineAdminForm(forms.ModelForm):
class Meta:
model = Server
def __init__(self, *args, **kwargs):
super(ServerInlineAdminForm, self).__init__(*args, **kwargs)
self.initial['name']='Testing'
class ServerInline(admin.TabularInline):
form = ServerInlineAdminForm
model = Server
extra = 39
class EnvironmentAdmin(admin.ModelAdmin):
inlines = [ServerInline]
但这不是我想要的,我希望能够使用列表中的39个不同值初始化39个Server表单实例。最好的方法是什么?
谢谢!
最佳答案
这是我的实现thanks to Steven for the idea。
全部在 admin.py 中:
class SecondaryModelInline(admin.ModelAdmin):
model = SecondaryModel
formset = SecondaryModelInlineFormSet
def get_formset(self, request, obj=None, **kwargs):
formset = super(SecondaryModelInline, self).get_formset(request, obj, **kwargs)
formset.request = request
return formset
def get_extra(self, request, obj=None, **kwargs):
extra = super(SecondaryModelInline, self).get_extra(request, obj, **kwargs)
something = request.GET.get('something', None)
if something:
extra = ... figure out how much initial forms there are, from the request ...
return extra
之前的某个地方,也在 admin.py 中,这是:
class SecondaryModelInlineFormSet(forms.models.BaseInlineFormSet):
model = SecondaryModel
def __init__(self, *args, **kwargs):
super(SecondaryModelInlineFormSet, self).__init__(*args, **kwargs)
if self.request.GET.get('something', None):
# build your list using self.request
self.initial=[{'field_a': 'A', ...}, {}... ]
关于django - Django:管理员内联为每个实例形成初始数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12384973/