简体   繁体   English

django-values()用于外键关系

[英]django - values() for foreign key relations

Django values() is very handy, is it possible to serialize nested object too? Django values()非常方便,是否也可以序列化嵌套对象?

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

I would hope to do something like 我希望做这样的事情

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

And to get a result 并得到结果

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

So I'll get a nested dict for the foreign key object (user), instead of just the user id. 因此,我将获得外键对象(用户)的嵌套字典,而不仅仅是用户ID。 I don't need more than a depth of 1, so only one level of related objects. 我不需要超过1的深度,因此只需一层相关对象。

I would suggest Django RestFrameWork for efficient use. 我建议有效利用Django RestFrameWork Define your serializers.py as below, 如下定义您的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')


and try this in your view/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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM