好,我有两个类,一个是Book,另一个是Category.Book和Category由一个名为Category的外键链接,该外键是一个Book字段. 请参阅代码
class Category(models.Model):
class Meta:
verbose_name_plural = "Categories"
category = models.CharField(max_length=20)
def __str__(self):
return self.category
class Book(models.Model):
book_title = models.CharField(max_length=20)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def __str__(self):
return self.book_title
下面是序列化程序类
class DynamicFieldsModelSerializer(serializers.ModelSerializer):
"""
A ModelSerializer that takes an additional `fields` argument that
controls which fields should be displayed.
"""
def __init__(self, *args, **kwargs):
# Don't pass the 'fields' arg up to the superclass
fields = kwargs.pop('fields', None)
# Instantiate the superclass normally
super().__init__(*args, **kwargs)
if fields is not None:
# Drop any fields that are not specified in the `fields` argument.
allowed = set(fields)
existing = set(self.fields)
for field_name in existing - allowed:
self.fields.pop(field_name)
class CategorySerializer(DynamicFieldsModelSerializer):
class Meta:
model = Category
# only show the category field
fields = ['category']
class BookSerializer(serializers.ModelSerializer):
# this will show the category data which is related to this Book
category = CategorySerializer()
class Meta:
model = Book
fields = '__all__'
现在我希望,当我使用@api_view获取图书的数据时,我应该只获得类别名称,这是完全没有问题的,但当我想要查看Category的数据时,我希望看到所有字段.但它什么也没显示出来. @api_view代码
@api_view(['GET'])
def getBooks(request):
books = Book.objects.all()
serilized_data = BookSerializer(books,many=True)
return Response({'status': 200, 'payload': serilized_data.data})
# it is now only show the category as only category field is passed in CategorySerilizer
@api_view(['GET'])
def getCategory(request):
category = Category.objects.all()
serilized_data = CategorySerializer(category,fields = ('__all__'),many=True)
return Response({'status': 200, 'payload': serilized_data.data})
而getCategory的输出是
{
"status": 200,
"payload": [
{},
{}
]
}
还有一件事需要注意的是,我的数据库中只有两个类别,它也通过{},{}显示