django - 一个内联用于多个模型

1 投票
1 回答
790 浏览
提问于 2025-04-18 02:12

我有一个内联组件:

class GenderInline(admin.StackedInline):
    model = models.GenderModel1
    extra = 0

我想在不同的管理表单中使用这个内联组件。

有时候我希望它的模型是 models.GenderModel1,有时候是 models.GenderModel2(这取决于这个内联组件相关的管理表单)。

我可以这样做吗?还是说唯一的办法就是复制这个内联组件?(我不太想这样做... 我需要复制10个内联组件...):

class GenderInline1(admin.StackedInline):
    model = models.GenderModel1
    extra = 0

class GenderInline2(admin.StackedInline):
    model = models.GenderModel2
    extra = 0

1 个回答

3

其实,你可以使用 type 动态创建类,这样就不用定义很多个类了。你可以定义一个函数,像这样创建一个类:

def get_inline_by_model(m):
    return type(
        'DynamicInline', 
        (admin.StackedInline, ), 
        {'model':m, 'extra':0} 
    )

然后在你的 Admin 类里,你只需要这样定义你的类:

inlines = ( get_inline_by_model (models.GenderModel1 ) ,  ) 

撰写回答