我试图让我的序列化程序工作,但我遇到了这个错误:TypeError: Direct assignment to the reverse side of a related set is prohibited. Use thumbnails.set() instead.
,我不知道如何修复它。我尝试用谷歌搜索这个问题,但只发现了这个docs,我不知道如何在代码中实现它:
class YoutubeSnippetSerializer(serializers.ModelSerializer):
thumbnails = YoutubeThumbnailSerializer(many=True)
class Meta:
model = YoutubeSnippet
fields = ['publishedAt', 'channelId', 'title', 'thumbnails', 'channelTitle', 'liveBroadcastContent', 'publishTime']
def create(self, validated_data):
thumb_data = validated_data.pop("thumbnails")
snippet = YoutubeSnippet.objects.create(**validated_data)
YoutubeThumbnails.objects.create(snippet=snippet, size="default", **thumb_data.pop("default"))
YoutubeThumbnails.objects.create(snippet=snippet, size="medium", **thumb_data.pop("medium"))
YoutubeThumbnails.objects.create(snippet=snippet, size="high", **thumb_data.pop("high"))
return snippet
添加缩略图变量时会出现问题。(thumbnails = YoutubeThumbnailSerializer(many=True)
&;'thumbnails'
)
代码:
class YoutubeVideoSerializer(serializers.ModelSerializer):
youtubeId = YoutubeIdSerializer(many=True)
snippet = YoutubeSnippetSerializer(many=True)
class Meta:
model = YoutubeVideo
fields = ['kind', 'etag', 'youtubeId', 'snippet']
def create(self, validated_data):
id_data = validated_data.pop("youtubeId")
snippet_data = validated_data.pop("snippet")
video = YoutubeVideo.objects.create(**validated_data)
for data in id_data:
YoutubeId.objects.create(youtubeVideo=video, **data)
for data in snippet_data:
YoutubeSnippet.objects.create(youtubeVideo=video, **data)
return video
class YoutubeThumbnailSerializer(serializers.ModelSerializer):
class Meta:
model = YoutubeThumbnails
fields = ['url', 'width', 'height']
型号:
class YoutubeVideo(models.Model):
kind = models.CharField(max_length=255, null=True)
etag = models.CharField(max_length=255, null=True)
class YoutubeSnippet(models.Model):
publishedAt = models.DateTimeField(null=True)
channelId = models.CharField(max_length=255, null=True)
title = models.CharField(max_length=1084, null=True)
channelTitle = models.CharField(max_length=255, null=True)
liveBroadcastContent = models.CharField(max_length=255, null=True)
publishTime = models.DateTimeField(null=True)
youtubeVideo = models.ForeignKey(YoutubeVideo, related_name='snippet', on_delete=models.CASCADE)
class YoutubeThumbnails(models.Model):
size = models.CharField(max_length=255, null=True)
url = models.URLField(null=True)
width = models.IntegerField(null=True)
height = models.IntegerField(null=True)
snippet = models.ForeignKey(YoutubeSnippet, related_name='thumbnails', on_delete=models.CASCADE)
我真的希望有人能给我指出正确的方向我完全迷路了
回溯:
Traceback (most recent call last):
File "Y:\interperters\Personal_website_server\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "Y:\interperters\Personal_website_server\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "Y:\interperters\Personal_website_server\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "Y:\interperters\Personal_website_server\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "Y:\interperters\Personal_website_server\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "Y:\interperters\Personal_website_server\lib\site-packages\rest_framework\views.py", line 505, in dispatch
response = self.handle_exception(exc)
File "Y:\interperters\Personal_website_server\lib\site-packages\rest_framework\views.py", line 465, in handle_exception
self.raise_uncaught_exception(exc)
File "Y:\interperters\Personal_website_server\lib\site-packages\rest_framework\views.py", line 476, in raise_uncaught_exception
raise exc
File "Y:\interperters\Personal_website_server\lib\site-packages\rest_framework\views.py", line 502, in dispatch
response = handler(request, *args, **kwargs)
File "Y:\interperters\Personal_website_server\lib\site-packages\rest_framework\decorators.py", line 50, in handler
return func(*args, **kwargs)
File "Y:\GitRepo\Personal_website_server\esfand_app\api\views.py", line 27, in create_video
serializer.save()
File "Y:\interperters\Personal_website_server\lib\site-packages\rest_framework\serializers.py", line 212, in save
self.instance = self.create(validated_data)
File "Y:\GitRepo\Personal_website_server\esfand_app\api\serializers.py", line 69, in create
YoutubeSnippet.objects.create(youtubeVideo=video, **data)
File "Y:\interperters\Personal_website_server\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "Y:\interperters\Personal_website_server\lib\site-packages\django\db\models\query.py", line 431, in create
obj = self.model(**kwargs)
File "Y:\interperters\Personal_website_server\lib\site-packages\django\db\models\base.py", line 495, in __init__
_setattr(self, prop, kwargs[prop])
File "Y:\interperters\Personal_website_server\lib\site-packages\django\db\models\fields\related_descriptors.py", line 546, in __set__
% self._get_set_deprecation_msg_params(),
TypeError: Direct assignment to the reverse side of a related set is prohibited. Use thumbnails.set() instead.
目前没有回答
相关问题 更多 >
编程相关推荐