【问题标题】:Customize Django admin changelist page自定义 Django 管理员更改列表页面
【发布时间】:2012-03-23 05:01:04
【问题描述】:

在 django-admin 模型更改列表页面中,我还想与其他模型进行交互。我的意思是,

我有这三个模型

  1.Keywords

        contains name field

  2.Category
        contains category_name field

  3.Keyword Category Relation
        Category is ForeignKey and Keyword is Many to many field

在我需要自定义的关键字模型changelist.html页面中,更改将是

There should be a dropdown box which lists all category model objects

如果我选择一些关键字并从下拉列表中选择特定类别,当点击保存按钮时,关键字和类别需要在另一个模型中更新

应该如何进行?它应该怎么做?建议我

【问题讨论】:

    标签: django django-admin django-templates


    【解决方案1】:

    您可以覆盖 save_model 和 save_formset 函数。我自己的代码(admin.py)的示例:

    class SubtaskAdmin(admin.ModelAdmin):
        form = SubtaskAdminForm
        list_display = ('id', 'task', 'date_created', 'author', 'status', 'is_reclamation')
        list_filter = ('date_created', 'status', 'is_reclamation')
        actions = [change_subtask_status_to_new, change_subtask_status_to_open, change_subtask_status_to_ready]
        fields = ('order', 'task', 'tags', 'amount', 'is_reclamation', 'status')
    
        def save_model(self, request, obj, form, change):
            if not change:
                employee = Employee.objects.get(id=request.user.id)
                obj.author = employee
            obj.save()
            super(SubtaskAdmin, self).save_model(request, obj, form, change)
    

    ...

    class MaintenanceOrderLineAdmin(admin.ModelAdmin):
            ...
            def save_formset(self, request, form, formset, change):
                    instances = formset.save(commit=False)
                    employee = get_object_or_404(Employee, id=request.user.id)
                    for instance in instances:
                        if isinstance(instance, Subtask): 
                            instance.author = employee
                            instance.save()
    

    【讨论】: