在django admin中将参数传递给内联形式

时间:2015-06-11 11:49:30

标签: django django-forms django-admin

我有一个继承自ModelAdmin的管理类:

var zmq = require('zmq');
var sub_socket = zmq.socket('sub');
sub_socket.connect('tcp://127.0.0.1:10001');
sub_socket.subscribe('TEST_MESSAGES')
sub_socket.on("message",function(msg){
    console.log(msg);
});

我想将参数传递给class TemplateAdmin (admin.ModelAdmin): inlines = (TemplateAttributeInline, CompanyAttributeInline) list_display = ("name", "created", "updated","departments") list_filter = ['companies__company'] list_editable = ("departments",) search_fields = ("name", "companies__company",) exclude = ("companies",) save_as = True ,然后将参数传递给TemplateAttributeInline。这样做的最佳方式是什么?

TemplateAttributeInline:

TemplateAttributeForm

TemplateAttributeForm

class TemplateAttributeInline (admin.TabularInline):
    model = TemplateAttribute
    extra = 0
    sortable_field_name = "display"
    form = TemplateAttributeForm

2 个答案:

答案 0 :(得分:3)

您可以创建一个返回表单类的函数:

def TemplateAttributeForm(param):

    class MyTemplateAttributeForm(forms.ModelForm):
        class Meta:
            model = Template
        def __init__(self,*args, **kwargs):
            super(TemplateAttributeForm, self).__init__(*args, **kwargs) 
            #do what ever you want with param

    return MyTemplateAttributeForm

在另一个功能中使用它来定义TemplateAttributeInline

def TemplateAttributeInline(param):

        class MyTemplateAttributeInline (admin.TabularInline):
            model = TemplateAttribute
            extra = 0
            sortable_field_name = "display"
            form = TemplateAttributeForm(param)

        return MyTemplateAttributeInline 

要完成,请在TemplateAdmin定义中使用此功能:

class TemplateAdmin (admin.ModelAdmin):
    inlines = (TemplateAttributeInline(param), CompanyAttributeInline)
    ....

答案 1 :(得分:0)

为了补充Sylvain Biehler的响应,我添加了以下代码以使内联表单具有动态性。这是django doc上的参考。在首次“加载”,“保存”之后和“重新加载”时调用方法“ get_inline_instances”。在“添加”事件中,不会传递任何内容。

在这里,“ obj”是管理表单当前绑定到的模型实例。对于未绑定(添加新)表格,它为“无”。除了直接传递模型实例“ obj”外,您还可以传递其任何属性,例如obj.id。在这种情况下,您需要首先检查实例是否不是None。

connected-react-router