我正在使用Django 2.1和Oracle 12C。从Django文档中,如果我们有类似的内容:
from django.db import models
class City(models.Model):
# ...
pass
def __str__(self):
return '{} {}'.format(self.fieldA, self.fieldB) #neither field is ever null
class Person(models.Model):
# ...
hometown = models.ForeignKey(
City,
on_delete=models.SET_NULL,
blank=True,
null=True,
)
def __str__(self):
return hometown.__str__()
class Book(models.Model):
# ...
author = models.ForeignKey(Person, on_delete=models.CASCADE)
,然后执行以下任一操作:
Book.objects.select_related('author__hometown').all()
Book.objects.select_related('author__hometown').filter(...)
我得到Unable to get repr for <class 'django.db.models.query.QuerySet'>
奇怪的是,Book.objects.select_related('author_hometown').get(pk=123)
可以工作。
另外,如果我使用的是Django 2.0而不是2.1,则 all 的查询将起作用。有人可以帮忙吗?谢谢。
更新
在模型中添加了 str 方法
另外,当我强制评估问题查询时,我得到django.db.utils.DatabaseError: ORA-00918: column ambiguously defined
答案 0 :(得分:1)
错误ORA-00918: column ambiguously defined
表示正在生成的查询正在从多个表中提取数据,并且在多个查询中的一个表中使用相同名称定义的一个字段,在查询中使用,而没有表限定符。例如
SELECT ORDER_NUMBER, ITEM_NUMBER, ORDERED_COUNT
FROM ORDER o
INNER JOIN ORDER_DETAIL d
ON d.ORDER_NUMBER = o.ORDER_NUMBER
会引发相同的错误,因为两个表中都存在ORDER_NUMBER
,但是在SELECT语句的字段列表中不符合o.
或d.
的条件。没有看到生成的查询和您的表定义,我无法确切地说出问题所在,但这与此类似。