我需要两个相互引用的序列化程序类,但如果两个类相互引用,我得到的是其中一个未定义的类。我创建了一个带有不同名称的类的副本,这似乎可行,但是有没有更好的方法可以在不创建 3 个类的情况下做到这一点?
class ArtistSerializer(serializers.ModelSerializer):
name = serializers.CharField()
class Meta:
model = Artist
fields = ('id', 'name',)
class TrackSerializer(serializers.ModelSerializer):
artist = ArtistSerializer(read_only=True)
class Meta:
model = Track
fields = ('id', 'artist', 'title',)
class ArtistSerializer2(serializers.ModelSerializer):
name = serializers.CharField()
tracks = TrackSerializer(many=True, read_only=True)
class Meta:
model = Artist
fields = ('id', 'name', 'slug', 'tracks')
请您参考如下方法:
这是一个循环类依赖。您的解决方案是可用的解决方法之一。另一种选择是通过使用 StringRelatedField 来避免循环依赖。
StringRelatedField may be used to represent the target of the relationship using its unicode method.
class ArtistSerializer(serializers.ModelSerializer):
tracks = TrackSerializer(many=True, read_only=True)
name = serializers.CharField()
class Meta:
model = Artist
fields = ('id', 'name', 'slug', 'tracks')
class TrackSerializer(serializers.ModelSerializer):
artist = StringRelatedField() # read only by default.
class Meta:
model = Track
fields = ('id', 'artist', 'title',)
