在没有外键关系的 Django 中加入两个不同的模型,一个 'unmanaged'
Join Two Different Models, One 'unmanaged', in Django Without a Foreignkey Relation
我有以下两个 Django 模型:
class Project(models.Model):
identifier = models.CharField(max_length=128)
target_value = models.CharField(max_length=64)
...
Meta:
managed='False'
db_table='projects'
class MainProjects(models.Model):
mp_identifier = models.CharField(max_length=128)
some_value = models.CharField(max_length=256)
...
包含 Project
模型的数据库实际上在某处的云数据库中关闭,实际上由一个单独的团队编写的完全不同的应用程序使用。我需要能够让 Django 提取 MainProjects
的列表,并以某种方式将 Project
模型中的 target_value
注释到 QuerySet 中。
我试过使用 .extra()
,但文档很薄,到目前为止我能找到的示例对我不起作用。如果可能的话,我也想避免使用原始 SQL。
现在,我通过使用为 Django 应用程序编写的管理命令从远程数据库中获取 target_value
并将其存储为 MainProjects
模型来解决这个问题属性,这样我就可以在本地引用它但是 - 糟糕。
想法?建议?
我建议您通读文档的这一部分。
https://docs.djangoproject.com/en/4.0/ref/models/options/#django.db.models.Options.managed
它详细解释了托管选项。
此外,当涉及到连接到不同的数据库时,您可以根据需要设置任意数量的数据库连接,并在 settings.py
文件中指定它们。
大多数 sql 服务器的工作方式是通过 TCP 或套接字。但是,我会尽可能推荐套接字,因为您需要连接到远程服务器,通过 TCP 连接可能更容易。
知道您可以输入任何 IP 地址、端口、用户名、密码等,并能够连接到托管 sql 服务器的该地址的服务器,这就是知道相关连接信息然后告诉 django 的事情。例如:
DATABASES = {
'remote_unmanaged': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '[the database name]',
'USER': '[the database user with remote access privilege]',
'PASSWORD': '[password for user above]',
'HOST': '[server ip address]',
'PORT': '',
}
}
此外,要使用来自远程连接服务器的查询集,您可以在此处查看:
我刚刚注意到关于您模型上元对象的另一件事:
class Project(models.Model):
identifier = models.CharField(max_length=128)
target_value = models.CharField(max_length=64)
class Meta:
managed=False # <-- here, literal False, not str which was truth, which means it was actually considered a managed model :)
db_table='projects'
我有以下两个 Django 模型:
class Project(models.Model):
identifier = models.CharField(max_length=128)
target_value = models.CharField(max_length=64)
...
Meta:
managed='False'
db_table='projects'
class MainProjects(models.Model):
mp_identifier = models.CharField(max_length=128)
some_value = models.CharField(max_length=256)
...
包含 Project
模型的数据库实际上在某处的云数据库中关闭,实际上由一个单独的团队编写的完全不同的应用程序使用。我需要能够让 Django 提取 MainProjects
的列表,并以某种方式将 Project
模型中的 target_value
注释到 QuerySet 中。
我试过使用 .extra()
,但文档很薄,到目前为止我能找到的示例对我不起作用。如果可能的话,我也想避免使用原始 SQL。
现在,我通过使用为 Django 应用程序编写的管理命令从远程数据库中获取 target_value
并将其存储为 MainProjects
模型来解决这个问题属性,这样我就可以在本地引用它但是 - 糟糕。
想法?建议?
我建议您通读文档的这一部分。
https://docs.djangoproject.com/en/4.0/ref/models/options/#django.db.models.Options.managed
它详细解释了托管选项。
此外,当涉及到连接到不同的数据库时,您可以根据需要设置任意数量的数据库连接,并在 settings.py
文件中指定它们。
大多数 sql 服务器的工作方式是通过 TCP 或套接字。但是,我会尽可能推荐套接字,因为您需要连接到远程服务器,通过 TCP 连接可能更容易。
知道您可以输入任何 IP 地址、端口、用户名、密码等,并能够连接到托管 sql 服务器的该地址的服务器,这就是知道相关连接信息然后告诉 django 的事情。例如:
DATABASES = {
'remote_unmanaged': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '[the database name]',
'USER': '[the database user with remote access privilege]',
'PASSWORD': '[password for user above]',
'HOST': '[server ip address]',
'PORT': '',
}
}
此外,要使用来自远程连接服务器的查询集,您可以在此处查看:
我刚刚注意到关于您模型上元对象的另一件事:
class Project(models.Model):
identifier = models.CharField(max_length=128)
target_value = models.CharField(max_length=64)
class Meta:
managed=False # <-- here, literal False, not str which was truth, which means it was actually considered a managed model :)
db_table='projects'