Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django-外键关系的值()_Python_Django_Foreign Keys - Fatal编程技术网

Python django-外键关系的值()

Python django-外键关系的值(),python,django,foreign-keys,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', 'fir

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': '..'}
 }
]
因此,我将获得外键对象(user)的嵌套dict,而不仅仅是用户id。 我不需要超过1的深度,因此只需要一级相关对象。

我建议有效使用。定义您的
序列化程序.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



Django内置序列化程序不支持相关字段,但有一些替代方案:
all_book_objects = Book.objects.all()
result = BookSerializer(all_book_objects, many=True).data