在我的Django代码中,我有以下模型:
class Swipe(models.Model):
user = models.ForeignKey(
Profile,
related_name='swipes',
on_delete=models.CASCADE,
null=False,
default=None
)
SWIPE_CHOICES = (
(1, "left"),
(2, "right"),
(3, "up"),
(4, "down")
)
direction = models.IntegerField(
choices = SWIPE_CHOICES
)
其中Profile是我的用户类。我有一个视图可以显示所有配置文件:
class ProfileList(generics.ListCreateAPIView):
serializer_class = ProfileSerializer
queryset = Profile.objects.all()
def perform_create(self, serializer):
serializer.save()
ProfileSerializer如下所示:
class ProfileSerializer(serializers.HyperlinkedModelSerializer):
# serializations of other fields
class Meta:
model = Profile
fields = (
'url', 'id', 'username', 'password',
'first_name', 'last_name', 'email',
'swipes',
)
我的Profile类的序列化仅返回“滑动”的网址(例如“ [host] / swipe / 1”)。
我知道外键关系应该如何工作的这种相反方式,但是我有办法序列化此滑动信息以显示例如滑动的方向,而不仅仅是URL滑动本身?
序列化Swipe时,我可以通过添加“ user = ProfileSerializer()”来使相关配置文件的序列化工作。但是,当我尝试在代码中添加“ swipes = SwipeSerializer()”时,swipes字段将从显示URL列表变为空地图(“ {}”)。
我正在“逆转”外键关系是一个问题吗?我如何才能使此序列化工作?
答案 0 :(得分:0)
您需要覆盖swipes
中ProfileSerializer
字段的默认序列化。但是,您需要注意,指定的序列化程序没有用于user
的字段,该字段最终将以递归方式彼此串行化。
基本上,您需要类似的东西:
class PureSwipeSerializer(serializers.HyperlinkedModelSerializer):
...
class PureProfileSerializer(serializers.HyperlinkedModelSerializer):
...
class ProfileSerializer(serializers.HyperlinkedModelSerializer):
swipes = PureSwipeSerializer(many=True)
...
class SwipeSerializer(serializers.HyperlinkedModelSerializer):
profile = PureProfileSerializer(many=False)
...