Django Admin:两个模型之间的交集(自然内部连接)
Django Admin: Intersection (Natural Inner Join) between Two Models
我是 Django 初学者。我有两个模型,我想在 Django 管理界面中显示为一个 table。以下是模型的简化版本:
class Final_Application_Personal_Detail(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=20)
id_no = models.CharField(max_length=14)
class Final_Application_Beneficiary_Detail(models.Model):
user = models.ForeignKey(User)
beneficiary_name = models.CharField(max_length=20)
beneficiary_id_no = models.CharField(max_length=14)
我想因为这两个模型在概念上构成了一个表单(一个 Final_Application 表单)的一部分,我本可以使用 Django 的表单向导 - 但是,因为实际上个人详细信息和受益人详细信息都很多填写,我想我想让用户有机会单独填写它们(据我所知,在 django formwizard 中,如果用户没有一次填写所有数据,那么所有以前的数据也丢失了,因为无法使用未验证的字段保存表单)。
我想在Django admin中加入这两个模型,这样管理用户就可以在一个页面上看到一个用户的所有信息(个人详细信息和受益人详细信息)。所以,我想对字段 'user' 上的上述 table 进行内部连接。 SQL 看起来像这样:
SELECT *
FROM Final_Application_Personal_Detail
JOIN Final_Application_Beneficiary_Detail
ON Final_Application_Personal_Detail.user = Final_Application_Beneficiary_Detail.user
关于 Django 的 ORM,我研究了关键字参数 related_to 以加入 table。我不认为这会起作用,但是......似乎 'select_related' 只是另一种规定外键的方式。我现在想使用原始 SQL 来加入 table。我已经尝试使用游标函数来实现原始 SQL,但我不太清楚如何实现它以便输出显示在 Django 的管理界面中。另外,我有点害怕使用 raw SQL,因为据我了解,raw SQL 会引入安全风险(我读过 Django 的 ORM 可以防止 SQL 注入).
感谢您的帮助。
您不能使用 django admin 执行此操作。但是,您可以使用 inlines 在用户管理中编辑这两个模型。
from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
class Final_Application_Personal_DetailInline(admin.StackedInline):
model = Final_Final_Applicationl_Detail
class Final_Application_Beneficiary_DetailInline(admin.StackedInline):
model = Final_Final_Application_Beneficiary_Detail
admin.site.unregister(User)
@admin.register(User)
class CustomUserAdmin(UserAdmin):
inlines = [
Final_Application_Personal_DetailInline,
Final_Application_Beneficiary_DetailInline,
]
我是 Django 初学者。我有两个模型,我想在 Django 管理界面中显示为一个 table。以下是模型的简化版本:
class Final_Application_Personal_Detail(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=20)
id_no = models.CharField(max_length=14)
class Final_Application_Beneficiary_Detail(models.Model):
user = models.ForeignKey(User)
beneficiary_name = models.CharField(max_length=20)
beneficiary_id_no = models.CharField(max_length=14)
我想因为这两个模型在概念上构成了一个表单(一个 Final_Application 表单)的一部分,我本可以使用 Django 的表单向导 - 但是,因为实际上个人详细信息和受益人详细信息都很多填写,我想我想让用户有机会单独填写它们(据我所知,在 django formwizard 中,如果用户没有一次填写所有数据,那么所有以前的数据也丢失了,因为无法使用未验证的字段保存表单)。
我想在Django admin中加入这两个模型,这样管理用户就可以在一个页面上看到一个用户的所有信息(个人详细信息和受益人详细信息)。所以,我想对字段 'user' 上的上述 table 进行内部连接。 SQL 看起来像这样:
SELECT *
FROM Final_Application_Personal_Detail
JOIN Final_Application_Beneficiary_Detail
ON Final_Application_Personal_Detail.user = Final_Application_Beneficiary_Detail.user
关于 Django 的 ORM,我研究了关键字参数 related_to 以加入 table。我不认为这会起作用,但是......似乎 'select_related' 只是另一种规定外键的方式。我现在想使用原始 SQL 来加入 table。我已经尝试使用游标函数来实现原始 SQL,但我不太清楚如何实现它以便输出显示在 Django 的管理界面中。另外,我有点害怕使用 raw SQL,因为据我了解,raw SQL 会引入安全风险(我读过 Django 的 ORM 可以防止 SQL 注入).
感谢您的帮助。
您不能使用 django admin 执行此操作。但是,您可以使用 inlines 在用户管理中编辑这两个模型。
from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
class Final_Application_Personal_DetailInline(admin.StackedInline):
model = Final_Final_Applicationl_Detail
class Final_Application_Beneficiary_DetailInline(admin.StackedInline):
model = Final_Final_Application_Beneficiary_Detail
admin.site.unregister(User)
@admin.register(User)
class CustomUserAdmin(UserAdmin):
inlines = [
Final_Application_Personal_DetailInline,
Final_Application_Beneficiary_DetailInline,
]