【问题标题】:How to include data from foreign key object in Django ORM query?如何在 Django ORM 查询中包含来自外键对象的数据?
【发布时间】:2019-07-26 11:42:36
【问题描述】:

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

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

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

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

我想查询这些模型并获取书籍的 QuerySet,然后通过 API 返回书籍。

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

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

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

【问题讨论】:

    标签: sql django postgresql django-models django-orm


    【解决方案1】:

    如果你使用 django rest framework 作为 API,你可以使用 serializer Method 字段来做到这一点

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

    另一种方法是向 Book Model 添加一个属性字段

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

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

    【讨论】:

    • 太棒了,Serializer 字段成功了!非常感谢。
    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    相关资源
    最近更新 更多