Jia*_*nbo 1 django django-rest-framework
我有一个名为的模型 Video
class Video(models.Model):
created = models.DateTimeField(auto_now_add=True)
name = models.CharField(max_length=100, blank=False, null=False, default='', unique=True)
file = models.FileField(upload_to='videos/', blank=False, null=False)
owner = models.ForeignKey('auth.User', related_name='videos', on_delete=models.CASCADE, verbose_name='')
def __str__(self):
return self.name + ': ' + self.file.name
class Meta:
ordering = ('created',)
Run Code Online (Sandbox Code Playgroud)
它的序列化器:
class VideoSerializer(serializers.ModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username')
class Meta:
model = Video
fields = ['name', 'file', 'owner']
Run Code Online (Sandbox Code Playgroud)
我试图在我的视图中访问序列化程序中的字段,因为我需要它来进行一些处理:
def post(self, request):
serializer = VideoSerializer(data=request.data)
if serializer.is_valid():
# I need the name of the file!!!!!
# accessing the fields below
print(serializer.name)
print(serializer.file.name)
# accessing the fields above
serializer.save(owner=request.user)
videos = Video.objects.filter(owner=request.user)
return Response({'videos': videos, 'serializer': VideoSerializer(), 'style': self.style})
return Response(data=None, status=status.HTTP_400_BAD_REQUEST, template_name='videoserver/error.html')
Run Code Online (Sandbox Code Playgroud)
但是当我提出请求时,它会报告此错误:
AttributeError: 'VideoSerializer' object has no attribute 'name'
Run Code Online (Sandbox Code Playgroud)
和
AttributeError: 'VideoSerializer' object has no attribute 'file'
Run Code Online (Sandbox Code Playgroud)
任何建议都会有很大的意义!!
错误可能在您的print()语句中.如果serializer有效,序列化数据将在serializer.data.
所以,它应该是
serializer.data['name']Run Code Online (Sandbox Code Playgroud) 代替 serializer.nameRun Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2089 次 |
| 最近记录: |