django - Django:管理员内联为每个实例形成初始数据

标签 django django-admin

我已经读了很多书,但似乎无法找到解决方案。

我正在用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/

相关文章:

python - 如何在用户注册时生成一个魔数(Magic Number)并将其填充到数据库中?

python - 带有 ./manager runserver 的 Django 运行良好,而 Django + uwsgi 返回 404

python - 错误 : didn't return an HttpResponse object. 它返回 None

python - 如何修复 "django-admin not recognized"

python - Django View 限制子查询

django - 如何使用带有mongoengine的django rest过滤

python - django 管理员内联 : get object from formfield_for_foreignkey

python - django - 内联 - 搜索现有记录而不是添加新记录

django-models - 模型类 "Name"如何在管理页面下变成复数 "Names"?

python - 统一码编码错误 : 'ascii' codec can't encode character u'\xc5' in position 35: ordinal not in range(128)