在 Django 中,利用外键对于建立存储的对象之间的关系至关重要跨多个数据库。但是,当涉及不同数据库的模型时,此过程可能会带来挑战。
Django 目前禁止之间的外键关系模型驻留在单独的数据库中。此限制源于缺乏对跨数据库关系的支持。如果您使用数据库路由器对模型进行分区,则外键关系必须限制在单个数据库内。
错误代码中遇到的问题源于尝试将“urls”数据库中的 LinkModel 实例分配给默认数据库中的 NewsModel 实例。由于这些模型属于不同的数据库,Django 会引发错误,阻止此分配。
要规避此限制,您可以实施自定义解决方法。不是直接通过 NewsModel 的链接字段分配 LinkModel 实例,而是手动设置数据库中的外键字段:
<code class="python">from django.db import connection # Retrieve the LinkModel instance from the database link = LinkModel.objects.using('urls').get(id=1) # Execute a raw SQL query to update the foreign key value in the default database with connection.cursor() as cursor: cursor.execute( "UPDATE news SET link_id = %s WHERE title = %s", [link.id, "test"] )</code>
这种方法手动更新默认数据库中的外键值,有效链接新闻项到所需的 LinkModel 实例。
以上是当遇到限制时,如何在 Django 中跨不同数据库实现外键?的详细内容。更多信息请关注PHP中文网其他相关文章!