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

Sql 如何在Django ORM查询中包含来自外键对象的数据?,sql,django,postgresql,django-models,django-orm,Sql,Django,Postgresql,Django Models,Django Orm,我试图在数据库中查询一个对象,并从另一个共享外键关系的对象获取数据 例如,如果我有以下模型: class Book(models.Model): language = models.ForeignKey('Language') ... class Language(models.Model): name = models.CharField(max_length=255, unique=True) 我想查询这些模型并获得一个图书查询集,然后通过API返回图书 在原始SQL中

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

例如,如果我有以下模型:

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

class Language(models.Model):
   name = models.CharField(max_length=255, unique=True)
我想查询这些模型并获得一个图书查询集,然后通过API返回图书

在原始SQL中,我会做一些类似于:

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

使用Django ORM有什么方法可以做到这一点吗?

如果您使用Django rest框架作为API,那么可以使用serializer方法字段来实现这一点

class BookSerializer(serializers.ModelSerializer):
    language = serializers.SerializerMethodField()
    class Meta:
        model = Book
        fields = ['id', 'language']
    def get_language(self,obj)
       return obj.language.name
另一种方法是向Book模型添加属性字段

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

现在,如果您使用book_obj.language,您可以在语言模型中获得名称

如果您使用django rest框架作为API,您可以通过使用serializer方法字段来实现这一点

class BookSerializer(serializers.ModelSerializer):
    language = serializers.SerializerMethodField()
    class Meta:
        model = Book
        fields = ['id', 'language']
    def get_language(self,obj)
       return obj.language.name
另一种方法是向Book模型添加属性字段

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

现在,如果您使用book_obj.language,您可以在语言模型中获得名称

Awesome,序列化程序字段完成了这一任务!非常感谢。太棒了,序列化程序字段成功了!非常感谢。