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.