django - 如何将内联添加到另一个应用程序的 ModelAdmin,而不产生循环依赖?

标签 django django-admin encapsulation

假设我有两个模型,位于不同的应用程序中。应用程序 2 知道应用程序 1,但应用程序 1 不知道应用程序 2:

# one/models.py

from django.db import models

class One(models.Model):
    pass


# two/models.py

from django.db import models
from one.models import One

class Two(models.Model):
    one = models.ForeignKey(One)

我还在管理站点中注册了 One:

# one/admin.py

from django.contrib import admin
from .models import One

admin.site.register(One)

如何在 One 的管理页面上将 Two 注册为内联,而不在两个应用之间引入循环依赖关系?

最佳答案

您可以非常简单地完成此操作,只要您不介意访问 ModelAdmin 上的“私有(private)”属性即可。 (按照惯例,以下划线开头的属性被视为私有(private)属性。)

# two/admin.py
from django.contrib import admin
from one.models import One
from .models import Two

class TwoInline(admin.StackedInline):
    model = Two

admin.site._registry[One].inlines.append(TwoInline)

关于django - 如何将内联添加到另一个应用程序的 ModelAdmin,而不产生循环依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32590901/

相关文章:

django - 如何防止 Django Admin 中 FK/MTM 字段的自(递归)选择

c# - 封装不是很可笑吗?

c++ - Process 的封装会产生意想不到的行为

python - 从特定目录继承的 Django 加载模板

python - Django 查询集按 _set 排序

python - 澄清/何时/何地在 django/python 中使用 super

python - Django filter() 查询抛出DoesNotExist 异常

django - 在 django admin 中向一个对象添加一个额外的按钮

python - Django 管理多对多子集

java - 在java中访问祖 parent 方法