反向关系时,如何在序列化程序中使用自定义名称而不是related_name?

时间:2019-05-28 10:50:04

标签: python django-rest-framework

如果两个模型之间存在反向关系,我们可以通过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'] 

请不要使其成为重复的人。尽管存在一些类似的问题,但我的问题尚未解决,所以这就是为什么出现此问题。

1 个答案:

答案 0 :(得分:0)

您确定没有重复吗?看上去与this answer中所说的完全一样。

总而言之,您可以使用SerializerMethodField为它指定一个自定义名称,然后在其中返回您想要的内容(只记得它是只读的),或者根据您想要从{ {1}}模型,您可以在常规字段(例如ForeignKey)中使用source属性。

更新:

这样对您有用吗?

CharField