Django admin 内联表格管理中的多对多字段不适用于关系双方

问题描述 投票:0回答:1

问题

考虑到该字段有

through
参数并且我无法更改数据库,如何将 m2m 字段集成到 modelAdmin 中?或者我如何使用内联表格管理和添加更多按钮?

描述

我有 Django 5 应用程序与遗留数据库(PostgreSQL)一起使用。

该数据库有 3 个表,按以下模型描述:

class EmployeeLinkRole(models.Model):
    employee = models.ForeignKey(
        "Employees",
        models.DO_NOTHING,
        db_column="Employee_ID",
        primary_key=True,
    ) 
    role = models.ForeignKey("Roles", models.DO_NOTHING, db_column="Role_ID")

    class Meta:
        managed = False
        db_table = 'Timesheet"."Employee_Link_Role'
        unique_together = (("employee", "role"),)


class Employees(models.Model):
    employee_id = models.BigAutoField(
        db_column="Employee_ID", primary_key=True
    )
    employee_name = models.CharField(
        max_length=500, db_column="Employee_Name", blank=True, null=True
    )
    role = models.ManyToManyField(
        "Roles",
        through=EmployeeLinkRole,
        through_fields=("employee", "role"),
    )

    class Meta:
        managed = False
        db_table = 'Timesheet"."Employees'


class Roles(models.Model):
    role_id = models.AutoField(db_column="Role_ID", primary_key=True)
    role_name = models.CharField(max_length=500, db_column="Role_Name")

    class Meta:
        managed = False
        db_table = 'Timesheet"."Roles'

我的管理员代码:

class RoleInline(admin.TabularInline):
    model = Employees.role.through


@admin.register(Employees)
class EmployeesAdmin(admin.ModelAdmin):
    inlines = [
        RoleInline,
    ]


@admin.register(Roles)
class RolesAdmin(admin.ModelAdmin):
    inlines = (RoleInline,)

问题

我面临的问题:内联模型在员工和角色模型中都显示并且工作正常。 但是我无法使其在员工管理中显示“添加更多”按钮。

在员工中

Employees admin

角色

Roles admin

期望

我需要在员工和角色管理员的内联表格管理中添加“添加更多”按钮。

我检查了什么

我花了很多时间寻找解决方案,包括与 GPT 交谈。

我发现带有按钮的块具有“display: none”display none属性。

我已经尝试将

extra = 4
max_num = 10
属性添加到内联管理中。

我已经尝试重新定义 ModelAdmin 类的

save
has_changed
方法。

我已经尝试过

collectstatic

django-models django-admin django-orm
1个回答
0
投票

深入研究源代码后,我发现我的

max_num
值被强制重新定义为 1,因为我在“通过”表中将
employee
字段设置为主键。

class EmployeeLinkRole(models.Model):
    employee = models.ForeignKey(
        ...
        primary_key=True,
    ) 
    ....

据我所知,除了协调DB的变化之外,我没有其他办法。

现在我有 Django 不支持的复合键。我需要添加一个 id 字段。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.