ValueError: Невозможно присвоить "имя пользователя": "Comment.created_by" должен быть экземпляром "User".
Я пытаюсь создать комментарий к модели и получаю ValueError, когда пытаюсь вызвать модель User. Я не знаю, что я делаю неправильно, вот мои фрагменты кода
models.py
from django.contrib.auth.models import User
class Comment(models.Model):
*****
*****
created_by = models.ForeignKey(User, related_name='comments', on_delete=models.CASCADE)
views.py
@api_view(['POST'])
def add_comment(request, course_slug, lesson_slug):
data = request.data
name = data.get('name')
content = data.get('content')
course = Course.objects.get(slug=course_slug)
lesson = Lesson.objects.get(slug=lesson_slug)
comment = Comment.objects.create(course=course, lesson=lesson, name=name, content=content, created_by=request.user.username)
return Response({'message': 'Comment added successfully'})
urls.py
urlpatterns = [
****
****
path('<slug:course_slug>/<slug:lesson_slug>/', views.add_comment),
]
[17/Sep/2022 12:37:52] "OPTIONS /api/v1/courses/python-programming/lesson-one/ HTTP/1.1" 200 0 Внутренняя ошибка сервера: /api/v1/courses/python-programming/lesson-one/ Traceback (последний последний вызов): File "E:\Web Projects\Learning Management System\src\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner response = get_response(request) Файл "E:\Web Projects\Learning Management System\src\venv\lib\site-packages\django\core\handlers\base.py", строка 181, в _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) Файл "E:\Web Projects\Learning Management System\src\venv\lib\site-packages\django\views\decorators\csrf.py", строка 54, в wrapped_view return view_func(*args, **kwargs) Файл "E:\Web Projects\Learning Management System\src\venv\lib\site-packages\django\views\generic\base.py", строка 70, in view return self.dispatch(request, *args, **kwargs) Файл "E:\Web Projects\Learning Management System\src\venv\lib\site-packages\rest_framework\views.py", строка 509, в dispatch response = self.handle_exception(exc) Файл "E:\Web Projects\Learning Management System\src\venv\lib\site-packages\rest_framework\views.py", строка 469, в handle_exception self.raise_uncaught_exception(exc) Файл "E:\Web Projects\Learning Management System\src\venv\lib\site-packages\rest_framework\views.py", строка 480, в raise_uncaught_exception raise exc Файл "E:\Web Projects\Learning Management System\src\venv\lib\site-packages\rest_framework\views.py", строка 506, в dispatch response = handler(request, *args, **kwargs) Файл "E:\Web Projects\Learning Management System\src\venv\lib\site-packages\rest_framework\decorators.py", строка 50, в handler return func(*args, **kwargs) Файл "E:\Web Projects\Learning Management System\src\courses\views.py", строка 41, in add_comment comment = Comment.objects.create(course=course, lesson=lesson, name=name, content=content, created_by=author) Файл "E:\Web Projects\Learning Management System\src\venv\lib\site-packages\django\db\models\manager.py", строка 85, в manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) Файл "E:\Web Projects\Learning Management System\src\venv\lib\site-packages\django\db\models\query.py", строка 451, in create obj = self.model(**kwargs) Файл "E:\Web Projects\Learning Management System\src\venv\lib\site-packages\django\db\models\base.py", строка 485, in init _setattr(self, field.name, rel_obj) File "E:\Web Projects\Learning Management System\src\venv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 215, in set
.
raise ValueError( ValueError: Cannot assign "'jacob.zulu@cs.unza.zm'": "Comment.created_by" должен быть экземпляром "User". [17/Sep/2022 12:37:52] "POST /api/v1/courses/python-programming/lesson-one/ HTTP/1.1" 500 119197
Измените свои взгляды следующим образом,
@api_view(['POST'])
def add_comment(request, course_slug, lesson_slug):
data = request.data
name = data.get('name')
content = data.get('content')
course = Course.objects.get(slug=course_slug)
lesson = Lesson.objects.get(slug=lesson_slug)
comment = Comment.objects.create(course=course, lesson=lesson, name=name, content=content, created_by=request.user) # updated here
return Response({'message': 'Comment added successfully'})
Поскольку created_by
является FK, вам нужно передать объект пользователя, а не user.username
comment = Comment.objects.create(course=course, lesson=lesson, name=name, content=content, created_by=request.user)
comment = Comment.objects.create(course=course, lesson=lesson, name=name, content=content, created_by=request.user)
created_by
должен быть User
объект, а не строка. поэтому постарайтесь предоставить здесь User
объект.