如果两个模型之间存在反向关系,我们可以通过ForeginKeyField的related_name参数在父级序列化器中获取所有相关的子行。我想使用其他名称而不是related_name 来获取这些行。
下面是常规使用的示例。
模型
class Library(models.Model):
libraryId = models.AutoField(primary_key = True)
libraryName = models.CharField(max_length=150)
class Book(models.Model):
bookId = models.AutoField(primary_key = True)
fk_book_libraryId = models.ForeignKey('Library', related_name='library_book_relation', on_delete=models.CASCADE )
序列化器
class BookSerializer(models.HyperlinkedModelSerializer):
class Meta:
model = Book
fields = '__all__'
class LibrarySerializer(serializers.ModelSerializer):
lib_name = serializers.CharField(source='libraryName')
library_book_relation = BookSerializer(many=True, read_only=True)
'''
I don't want to use the name 'library_book_relation'. I want to make it as short custom name like the 'lib_name'.
'''
class Meta:
model = Library
fields = '__all__'
extra_fields = ['library_book_relation']
我想要类似下面的内容:
class Meta:
model = Library
fields = '__all__'
extra_fields = ['all_books']
请不要使其成为重复的人。尽管存在一些类似的问题,但我的问题尚未解决,所以这就是为什么出现此问题。
答案 0 :(得分:0)
您确定没有重复吗?看上去与this answer中所说的完全一样。
总而言之,您可以使用SerializerMethodField
为它指定一个自定义名称,然后在其中返回您想要的内容(只记得它是只读的),或者根据您想要从{ {1}}模型,您可以在常规字段(例如ForeignKey
)中使用source
属性。
这样对您有用吗?
CharField