如何在 Django ORM 查询中包含来自外键对象的数据?

How to include data from foreign key object in Django ORM query?

我试图在我的数据库中查询一个对象,并从另一个共享外键关系的对象获取数据。

例如,如果我有这些模型:

class Book(models.Model):
   language = models.ForeignKey('Language')
   ...

class Language(models.Model):
   name = models.CharField(max_length=255, unique=True)

我想查询这些模型并获得图书的 QuerySet,然后通过 API return 图书。

在原始 SQL 中,我会做类似的事情:

SELECT book, language.name
FROM book
JOIN ....

有什么方法可以用 Django ORM 来完成这个吗?

如果您使用的是 API 的 django rest 框架,您可以使用序列化程序方法字段

class BookSerializer(serializers.ModelSerializer):
    language = serializers.SerializerMethodField()
    class Meta:
        model = Book
        fields = ['id', 'language']
    def get_language(self,obj)
       return obj.language.name

另一种方法是将 属性 字段添加到图书模型

   @property
   def language(self):
       return self.language.name

现在如果你这样做book_obj.language,你可以得到语言模型中的名字