django - 外键关系的values()

时间:2018-02-27 16:50:47

标签: python django foreign-keys

Django values()非常方便,是否也可以序列化嵌套对象?

class Book(model.Models):
   name = models.CharField(max_length=50)
   user = models.ForeignKey(settings.AUTH_USER_MODEL)

我希望做一些像

这样的事情
d = Book.objects.all().values('name', 'user', deep={
    'user': ['username', 'first_name', 'last_name'] # related user fields
})

获得结果

[
 {
  'name': 'book1',
  'user': {'username': 'user1', 'first_name': '...', 'last_name': '..'}
 }
]

因此,我将获得外键对象(用户)的嵌套字典,而不仅仅是用户ID。 我不需要超过1的深度,因此只需要一个级别的相关对象。

1 个答案:

答案 0 :(得分:1)

我建议Django RestFrameWork有效使用。定义您的serializers.py,如下所示,

from rest_framework.serializers import ModelSerializer


class UserSerializer(ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name')


class BookSerializer(ModelSerializer):
    user = UserSerializer()

    class Meta:
        model = Book
        fields = ('name', 'user')


并在你的视图/ shell中尝试这个

book = Book.objects.get(id=1)
result = BookSerializer(book).data


OR

all_book_objects = Book.objects.all()
result = BookSerializer(all_book_objects, many=True).data