Django 2.1上的select_related不起作用

时间:2018-08-15 15:02:19

标签: django oracle orm

我正在使用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

1 个答案:

答案 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.的条件。没有看到生成的查询和您的表定义,我无法确切地说出问题所在,但这与此类似。