models.py
class Author(models.Model):
name = models.CharField(max_length=30)
surname = models.CharField(max_length=50)
class Exhibit(models.Model):
author_id = models.ForeignKey(Author)
title = models.CharField(max_length=60)
create.sql (PostgreSQL)
CREATE TABLE Author (
id serial NOT NULL,
name varchar(30) NOT NULL,
surname varchar(50) NOT NULL,
);
CREATE TABLE Exhibit (
id serial NOT NULL,
author_id int NOT NULL,
title varchar(50) NOT NULL
);
这些是我的简化模型(与数据库表一对一映射),我正在执行一个看起来像这样的原始查询
Exhibit.objects.raw("SELECT * FROM Exhibit WHERE author_id = 1")
结果,我收到一个 ValueError - Cannot allocate "1": "Exhibit.author_id"must be a "Author"实例。
有没有一种方法可以在不使用 ORM 和 Author.objects(以及类似的东西)的情况下,仅通过查询数据库来解决这个问题?
最佳答案
用户django.db.connection为此:
from django.db import connection
cursor = connection.cursor()
cursor.execute("SELECT * FROM Exhibit WHERE author_id = 1")
result = cursor.fetchall()
关于python - Django 原始 SQL 查询与外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41839442/