[英]Django Rest Framework many-to-many serialization is not working as expected
I dug into stackoverflow and couldn't find anything related to this error/mistake. 我进入了stackoverflow,找不到与此错误/错误相关的任何内容。
Well, I have this model: 好吧,我有这个模型:
class ChatRoom(models.Model):
class Meta:
app_label = 'chatbot'
group = models.CharField(max_length=255)
category = models.CharField(max_length=255)
name = models.CharField(max_length=255)
url = models.URLField()
online = models.IntegerField(default=0)
recaptcha_hash = models.TextField(null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
bots = models.ManyToManyField(MarkBot, through='ChatBot')
def __str__(self):
return '{0}/{1}/{2}'.format(self.group, self.category, self.name)
This serializer: 该序列化器:
class ChatRoomSerializer(ModelSerializer):
bots = MarkBotSerializer(read_only=True, many=True, allow_null=True)
class Meta:
model = ChatRoom
fields = ['group', 'category', 'name', 'url',
'online', 'recaptcha_hash', 'bots']
read_only_fields = ['pk', 'created_at', 'updated_at']
My many-to-many (with "through") middle model is: 我的多对多(带有“通过”)中间模型是:
class ChatBot(models.Model):
class Meta:
app_label = 'chatbot'
room_token = models.TextField()
bot = models.ForeignKey(MarkBot, on_delete=models.CASCADE)
chat_room = models.ForeignKey(ChatRoom, on_delete=models.CASCADE)
Finally, my APIview, that retrieves the data to the client: 最后,我的APIview将数据检索到客户端:
class ChatRoomsActive(APIView):
permission_classes = [IsAuthenticated]
def get(self, request, *args, **kwargs):
user = request.user
try:
campaign = Campaign.objects.get(user=user, is_active=True)
chat_rooms = ChatRoom.objects.filter(campaign=campaign)
rooms = ChatRoomSerializer(
data=list(chat_rooms.values()),
many=True
)
if rooms.is_valid():
return Response({
'data': rooms.data,
'error': None
})
except Campaign.DoesNotExist:
return Response({
'data': [],
'error': 'Campanha inválida'
}, status=status.HTTP_400_BAD_REQUEST)
except Exception:
return Response({
'data': [],
'error': 'Ocorreu um erro inesperado em sua requisição'
}, status=status.HTTP_400_BAD_REQUEST)
return Response({
'data': [],
'error': 'Não foi possível obter as salas ativas'
}, status=status.HTTP_400_BAD_REQUEST)
And, in all my JSON serialized results I receive the attribute "bots" equals "null", even when I have a bot attached to a room. 而且,在我所有的JSON序列化结果中,即使我将机器人连接到房间,我也会收到属性“ bots”等于“ null”。
Expected Output 预期产量
A list of bots attached to that specific room or null if it has none. 附加到该特定房间的漫游器列表;如果没有,则为null。
Thank you, in advance! 先感谢您!
chat_rooms.values()
is likely not to have the related bots
and calling is_valid
for serialization doesn't make sense - I'm not sure it works at all. chat_rooms.values()
可能没有相关的bots
并且调用is_valid
进行序列化没有任何意义-我不确定它是否可以工作。
rooms = ChatRoomSerializer(
instance=list(chat_rooms),
many=True
)
return Response({
'data': rooms.data,
'error': None
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.