首页 > 解决方案 > 在 2 个不同的数据库之间运行查询的方法或其他东西

问题描述

我会根据我的模型之间的公共字段(电子邮件)显示远程表中的一些字段。我继续:

我的 Django 项目显示一个主表Prospect,与另一个表Email (ForeignKey) 相关。存储在我的默认 Django DB (Postgres) 中。

然后我可以在另一个应用程序中显示来自第三个电子邮件工具的远程表,该表存储在 MySQL 数据库中,这要归功于 Django 数据库路由器系统。所有这些在我的 Django 管理员中都很好地共存。

现在我将在我的前景管理表单中显示我的远程表中的一些字段,当然是只读的。在 SQL/PHP 中,简化,我会做这样的事情:

SELECT myfield FROM MyRemoteTable WHERE email = {EmailValue}

但是我可以在哪里以及如何使用 Django 做到这一点?我想在我的电子邮件模型中使用一种特殊的方法,但是……并不容易!

编辑:

根据 AKX 的建议,我开始在我的EmailInLine中添加一个特殊方法:

class EmailInLine(admin.TabularInline):
model = Email
extra = 0

readonly_fields=('get_test1', )

def get_test1(self, obj):
    return "xxx"
get_test1.short_description = 'Test 1'

这在我的表格子表单中显示“xxx”,在每封电子邮件的右侧,很好。

好的,所以现在我必须找到如何编写一个 Python 查询来恢复我的远程相关字段,在我的查询中使用每封电子邮件作为变量。

提前 THX

标签: django

解决方案


由于ModelAdmin'sreadonly_fields允许在管理类中调用,您可以执行类似的操作

class ProspectAdmin(ModelAdmin):
  readonly_fields = (...,'external_email_info')
  #... 
  def external_email_info(self, instance: Prospect):
    return get_that_external_info(instance) 

iirc,mark_safe如果你需要渲染一个小部件,你也可以返回一个已经被 d 的 html 字符串。


推荐阅读