Невозможно присвоить "'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()
.
Я не могу понять, что обе строки уже являются строками, тогда почему он выдал эту ошибку