Python django-外键关系的值()
Django values()非常方便,是否也可以序列化嵌套对象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
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