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,序列化程序字段完成了这一任务!非常感谢。太棒了,序列化程序字段成功了!非常感谢。