首页 > 解决方案 > 显示通过 ManyToMany 字段的字段 django admin

问题描述

我正在开发一个用 Python 2.7 和 Django 1.11 开发的项目。
我试图在管理页面中显示两个通过 ManyToMany 字段的字段。

这里的模型:

class ModelZero(Model):
    # some fields
    mtm_field = models.ManyToManyField(to="ModelOne", through="ModelTwo")

class ModelOne(Model):
    # some fields
    field_1_1 = models.CharField(unique=True, max_length=200)
    field_1_2 = models.BooleanField(default=True)

class ModelTwo(Model):
    # some fields
    field_2_1 = models.ForeignKey('ModelOne', on_delete=models.CASCADE)
    field_2_2 = models.BooleanField(default=True)

在 ModelZero 管理页面中,我想显示来自 ModelZero 本身的一些字段以及来自 ModelTwo 的 field_2_1 和 field_2_2。
更详细地说,field_2_1 应该使用自定义小部件呈现。
请注意 ModelZeroAdmin 是内联的。

这里是管理页面:

class ModelZeroAdmin(DynamicRawIDMixin, admin.TabularInline):
    model = ModelZero
    fields = ('some', 'fields', 'field_2_2')
    form = forms.ModelZeroForm

    def field_2_2(self, obj):
        return obj.mtm_field.through.field_2_2

这里的表格:

class ModelZeroForm(ModelForm):
    class Meta:
        widgets = {
            "mtm_field.through.field_2_1": dal.autocomplete.ModelSelect2Multiple(
                url="my-autocomplete-url"
            )
        }

这样我有两个错误:

  1. 无法在字段元组中添加自定义字段 (field_2_2)
  2. 未显示自定义小部件

有没有办法使用这种模型结构来实现这个目标?

标签: pythondjangopython-2.7django-modelsdjango-admin

解决方案


我没有使用旧 Django 版本的经验,但如果我没记错的话,管理界面中相关字段的语法将类似于 : mtm_field__field_2_2


推荐阅读