问题
考虑到该字段有
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,)
问题
我面临的问题:内联模型在员工和角色模型中都显示并且工作正常。 但是我无法使其在员工管理中显示“添加更多”按钮。
在员工中
角色
期望
我需要在员工和角色管理员的内联表格管理中添加“添加更多”按钮。
我检查了什么
我花了很多时间寻找解决方案,包括与 GPT 交谈。
我已经尝试将
extra = 4
和 max_num = 10
属性添加到内联管理中。
我已经尝试重新定义 ModelAdmin 类的
save
和 has_changed
方法。
我已经尝试过
collectstatic
。
深入研究源代码后,我发现我的
max_num
值被强制重新定义为 1,因为我在“通过”表中将 employee
字段设置为主键。
class EmployeeLinkRole(models.Model):
employee = models.ForeignKey(
...
primary_key=True,
)
....
据我所知,除了协调DB的变化之外,我没有其他办法。
现在我有 Django 不支持的复合键。我需要添加一个 id 字段。