我从request.data访问所有值没什么问题。
这是我的代码和屏幕:
我的观点集:
class LorebookViewset(ModelViewSet):
queryset = Lorebook.objects.all()
serializer_class = LorebookSerializer
permission_classes = (
permissions.IsAuthenticated,
)
def perform_create(self, serializer):
data = self.request.data
print(data)
print(data['teams'])
序列化器:
class LorebookSerializer(serializers.ModelSerializer):
teams = serializers.StringRelatedField(many=True, read_only=True)
categories = serializers.StringRelatedField(many=True, read_only=True)
author = serializers.StringRelatedField(read_only=True)
class Meta:
model = Lorebook
fields = '__all__'
型号:
class Lorebook(models.Model):
title = models.CharField(max_length=50, unique=True)
cover = models.FileField(default='lorebooks/cover.jpg', null=True)
thumbnail = models.FileField(default='lorebooks/thumb.jpg', null=True)
banner = models.FileField(default='lorebooks/banner.jpg', null=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.TextField()
tags = ArrayField(models.TextField(), default=list)
categories = models.ManyToManyField(Category)
teams = models.ManyToManyField(Team)
date_created = models.DateTimeField(auto_now_add=True)
trailer = models.TextField()
is_read = models.BooleanField(default=False)
def __str__(self):
return self.title
为什么我只从团队而不是列表中获得最后的价值?
答案 0 :(得分:1)
这实际上是按照QueryDict
的规范应该获得的,即使这不是您习惯与Python dict
进行交互的人所期望的。规范返回其值为列表的任何键的最后一个值。
https://runtime-typing.readthedocs.io
我相信这里的想法是要防止那种天真地假设您在索要/获得单个项目的代码在获取项目列表时就被炸毁的代码。
如果要获取整个列表:
def perform_create(self, serializer):
data = self.request.data
print(data)
print(data.getlist('teams')
应该可以解决问题。