django - 在 Django Admin 中包含来自 OneToOneField 的字段
问题描述
我正在尝试将 OneToOneField 中的字段添加到我的管理视图中。这是我的模型外观的示例。
class Customer(BaseUser):
name = CharField()
address = CharField()
secondary_information = OneToOneField("SecondaryCustomerInfo", on_delete=SET_NULL, null=True)
class SecondaryCustomerInfo(models.Model):
email = EmailField()
我尝试像这样将字段添加为内联。
class SecondaryCustomerInfoInline(admin.StackedInline):
model = SecondaryCustomerInfo
class CustomerAdmin(admin.ModelAdmin):
inlines = [SecondaryCustomerInfoInline]
但我得到了错误
<class 'user.admin.SecondaryCustomerInfoInline'>: (admin.E202) 'user.SecondaryCustomerInfo' has no ForeignKey to 'user.Customer'.
我习惯于将 OneToOneField 放在辅助模型上,但我的同事要求我将它放在主 Customer 模型上,因为我们将更频繁地访问该信息。我认为改变事情是让我绊倒的原因。如何在客户的管理视图中包含来自 SecondaryCustomerInfo 的字段?
解决方案
答案是使用Django Reverse Admin
从其文档中:
使 django admin 以更好的方式处理 OneToOneFields 的模块。一对一关系的一个常见用例是将模型“嵌入”到另一个模型中。例如,一个人可能有多个指向地址实体的外键、一个家庭地址、一个公司地址等。Django 管理员使用选择框显示这些关系,让用户选择要连接到人的地址实体。处理这种关系的一种更自然的方式是使用内联。但是,由于外键放置在拥有实体上,因此无法使用 django 管理员标准内联类。
class CustomerAdmin(ReverseModelAdmin):
inline_type = 'stacked'
inline_reverse = ['secondary_information']
推荐阅读
- ios - iOS Swift:不使用 RxCocoa 的 TableView 数据源
- verilog - 使用 block rom 将图像值存储在 fpga 中
- c# - C# 垃圾字符破坏了 XElement “漂亮”的表示
- mongodb - 无法从 mongo db react native 获取数据
- html - XMLHttpRequest 对象未正确返回其参数
- html - Flexslider 缩略图显示为多行
- algolia - 如何保护/保护 Algolia 前端 api 密钥的使用?
- ansible - 如何在 Ansible 中创建“null”默认值
- https - traefik 的 tls:客户端在访问 https 端点时没有提供证书
- google-chrome-devtools - 如何查看响应原因短语