Невозможно присвоить "'Test'": "BlogPostComment.blog_post" должен быть экземпляром "BlogPost".

Я пытаюсь создать REST API для публикации комментариев. Я не использую обычные представления ``request.POST'', поскольку не хочу, чтобы для отправки комментария происходило перенаправление на новую страницу.

Мой план состоит в том, чтобы AJAX комментировать.

Но я получаю эту ошибку:

Отслеживание в консоли:

Traceback (most recent call last):
  File "C:\My_Stuff\Blogistan\env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\My_Stuff\Blogistan\env\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\My_Stuff\Blogistan\env\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\My_Stuff\Blogistan\env\lib\site-packages\django\views\generic\base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\My_Stuff\Blogistan\env\lib\site-packages\rest_framework\views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "C:\My_Stuff\Blogistan\env\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "C:\My_Stuff\Blogistan\env\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
    raise exc
  File "C:\My_Stuff\Blogistan\env\lib\site-packages\rest_framework\views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "C:\My_Stuff\Blogistan\env\lib\site-packages\rest_framework\decorators.py", line 50, in handler
    return func(*args, **kwargs)
  File "C:\My_Stuff\Blogistan\blog\views.py", line 44, in CreateComment
    serializer.create(request.data)
  File "C:\My_Stuff\Blogistan\env\lib\site-packages\rest_framework\serializers.py", line 939, in create
    instance = ModelClass._default_manager.create(**validated_data)
  File "C:\My_Stuff\Blogistan\env\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\My_Stuff\Blogistan\env\lib\site-packages\django\db\models\query.py", line 451, in create
    obj = self.model(**kwargs)
  File "C:\My_Stuff\Blogistan\env\lib\site-packages\django\db\models\base.py", line 485, in __init__
    _setattr(self, field.name, rel_obj)
  File "C:\My_Stuff\Blogistan\env\lib\site-packages\django\db\models\fields\related_descriptors.py", line 215, in __set__
    raise ValueError(
ValueError: Cannot assign "'Test'": "BlogPostComment.blog_post" must be a "BlogPost" instance.

Мои модели:

class Author(User):
    desc = models.TextField(max_length=720)
    image = models.ImageField()

    def __str__(self):
        return self.first_name + ' ' + self.last_name


class BlogPost(models.Model):
    title = models.CharField(max_length=360, unique=True)
    urlpattern = models.SlugField(max_length=360, unique=True)
    content_html = TextField()
    date_added = models.DateField(auto_now_add=True)
    author = models.ForeignKey(Author, on_delete=models.SET_NULL, null=True)

    class Meta:
        ordering = ['-date_added']

    def __str__(self):
        return self.title

class BlogPostComment(models.Model):
    blog_post = models.ForeignKey(BlogPost, related_name='comments', on_delete=models.CASCADE)
    user = models.ForeignKey(User, related_name='comments', on_delete=models.CASCADE)
    time_added = models.DateTimeField(auto_now_add=True)
    body = models.TextField()
    
    class Meta:
        ordering = ['-time_added']
    
    def __str__(self):
        return self.blog_post + ' | ' + self.user

Мой сериализатор:

class BlogPostCommentSerializer(serializers.ModelSerializer):
    blog_post = serializers.PrimaryKeyRelatedField(many=False, queryset=BlogPost.objects.all())

    class Meta:
        model = BlogPostComment
        fields = ['blog_post', 'user', 'body']
        read_only_fields = []

Мое мнение:

def CreateComment(request, url):
    serializer = BlogPostCommentSerializer(read_only=False, data=request.data)
    
    if serializer.is_valid():
        serializer.create(request.data)
    
    return Response(request.data)

Я использую базу данных Postgres, размещенную на Heroku, если это то, что вам нужно.

Я думаю, что у вас есть модель Blog Post, и "blog_post" должен быть экземпляром "BlogPost", а не BlogPostComment. Не могли бы вы предоставить здесь все модели? Проблема может возникнуть из-за отношения/связи между двумя таблицами

Я сделал это, чтобы решить проблему администрирования:

def __str__(self):
        return str(self.blog_post) + ' | ' + str(self.user)

Я не использовал str(). Я не могу понять, что обе строки уже являются строками, тогда почему он выдал эту ошибку

Вернуться на верх