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 объект.

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