Python 类型错误:禁止直接指定到相关集合的反面。改为使用缩略图.set()
我试图让序列化程序正常工作,但遇到了以下错误:Python 类型错误:禁止直接指定到相关集合的反面。改为使用缩略图.set(),python,django,django-rest-framework,Python,Django,Django Rest Framework,我试图让序列化程序正常工作,但遇到了以下错误:TypeError:禁止直接分配到相关集的反面。改用缩略图.set()。我不知道如何修复它。我曾尝试用谷歌搜索这个问题,但只发现了我不知道如何在代码中实现的问题: class YoutubeSnippetSerializer(serializers.ModelSerializer): thumbnails = YoutubeThumbnailSerializer(many=True) class Meta: mode
TypeError:禁止直接分配到相关集的反面。改用缩略图.set()。
我不知道如何修复它。我曾尝试用谷歌搜索这个问题,但只发现了我不知道如何在代码中实现的问题:
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 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.
我认为错误可能是您对同一个模型使用了related_name=“thumbnails”,并添加了同名的序列化程序字段,只是尝试重新调用其中任何一个。这并不能解决错误。然后系统只是输出了一个由此更改引起的新错误:
TypeError:YoutubeSnippet()得到了一个意外的关键字参数“newvalue”
我认为错误可能是您对同一个模型使用了相关的\u name=“thumbnails”,并添加了同名的序列化程序字段,只是尝试重新调用其中一个。这并不能解决错误。然后系统只输出一个由此更改引起的新错误:TypeError:YoutubeSnippet()获得了一个意外的关键字参数“newvalue”
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.