Javascript 从React向Django Rest框架发送请求后图像文件时出现问题

Javascript 从React向Django Rest框架发送请求后图像文件时出现问题,javascript,django,reactjs,forms,django-rest-framework,Javascript,Django,Reactjs,Forms,Django Rest Framework,我试图从React向Django Rest框架发送图像文件,但Django Rest似乎没有接收到我的数据 当我直接从Django REST框架发出POST请求时,它工作得很好,但当我尝试通过react执行此操作时,它会抛出POST 500错误 我不确定这是否与我的内容类型有关,或者是其他原因 这是我在React中的职责 createPainting = (data) => { console.log(data) console.log(JSON.stringify(

我试图从React向Django Rest框架发送图像文件,但Django Rest似乎没有接收到我的数据

当我直接从Django REST框架发出POST请求时,它工作得很好,但当我尝试通过react执行此操作时,它会抛出POST 500错误

我不确定这是否与我的内容类型有关,或者是其他原因

这是我在React中的职责

  createPainting = (data) => {

    console.log(data)
    console.log(JSON.stringify(data))

    const endpoint = "/api/paintings/photos"; //notice the endpoint is going to a relative request, (relative to where the final javascript built code will be)
    const csrfToken = cookie.load("csrftoken");

    if (csrfToken !== undefined) {
      // this goes into the options argument in fetch(url, options)
      let lookupOptions = {
        method: "POST",
        headers: {
          "Content-Type": "multipart/form-data; boundary=63c5979328c44e2c869349443a94200e",
          "Process-Data": "false",
          "Accept": "multipart/form-data, application/json",
          "X-CSRFToken": csrfToken
        },
        body: JSON.stringify(data),
        credentials: "include"
      };

    fetch(endpoint, lookupOptions)
        .then(response => {
          return response.json();
        })
        this.clearForm()
        .catch(error => {
          console.log("error", error);
          alert("An error occured, please try again later.");
        });
    }
  };
输入的数据如下所示:

{srcs: "yacht3.jpeg", title_id: "109"}
{"srcs":"yacht3.jpeg","title_id":"109"}
当我将其字符串化时,它如下所示:

{srcs: "yacht3.jpeg", title_id: "109"}
{"srcs":"yacht3.jpeg","title_id":"109"}
这是完整的错误消息

Traceback (most recent call last):
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.NotNullViolation: null value in column "title_id" violates not-null constraint
DETAIL:  Failing row contains (99, default.jpg, null, 1).


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
    response = get_response(request)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 128, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/views/generic/base.py", line 69, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/rest_framework/views.py", line 483, in dispatch
    response = self.handle_exception(exc)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/rest_framework/views.py", line 443, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/rest_framework/views.py", line 480, in dispatch
    response = handler(request, *args, **kwargs)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/rest_framework/generics.py", line 244, in post
    return self.create(request, *args, **kwargs)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/rest_framework/mixins.py", line 21, in create
    self.perform_create(serializer)
  File "/home/hzren/dev/t_and_b_website/src/paintings/views.py", line 132, in perform_create
    serializer.save(user=self.request.user)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/rest_framework/serializers.py", line 214, in save
    self.instance = self.create(validated_data)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/rest_framework/serializers.py", line 940, in create
    instance = ModelClass.objects.create(**validated_data)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/models/query.py", line 417, in create
    obj.save(force_insert=True, using=self.db)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/models/base.py", line 729, in save
    force_update=force_update, update_fields=update_fields)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/models/base.py", line 759, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/models/base.py", line 842, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/models/base.py", line 880, in _do_insert
    using=using, raw=raw)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/models/query.py", line 1125, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1285, in execute_sql
    cursor.execute(sql, params)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 100, in execute
    return super().execute(sql, params)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 68, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/home/hzren/dev/t_and_b_website/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: null value in column "title_id" violates not-null constraint
DETAIL:  Failing row contains (99, default.jpg, null, 1).
它似乎没有接收到我的数据输入

以下是我的绘画/视图中的相关代码

class PaintingPhotosListCreateAPIView(generics.ListCreateAPIView):
    queryset            = PaintingPhoto.objects.all()
    serializer_class    = PaintingPhotoSerializer
    permission_classes  = [permissions.IsAuthenticatedOrReadOnly]
    pagination_class    = PaintingPhotosPageNumberPagination


    def perform_create(self, serializer):
        serializer.save(user=self.request.user)


    def get_queryset(self):
        # filter the queryset based on the filters applied
        queryList = PaintingPhoto.objects.all()

        title       = self.request.query_params.get('title', None)
        src         = self.request.query_params.get('src', None)

        return queryList

class PaintingPhotosTitleListCreateAPIView(generics.ListCreateAPIView):
    queryset            = PaintingPhoto.objects.all()
    serializer_class    = PaintingPhotoSerializer
    lookup_field        = 'title_id'
    permission_classes  = [permissions.IsAuthenticatedOrReadOnly]

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

    def get_queryset(self):
            title_id = self.kwargs['title_id']
            return PaintingPhoto.objects.filter(title_id=title_id)

class PaintingPhotosSpecificDetailAPIView(generics.RetrieveUpdateDestroyAPIView):
    queryset            = PaintingPhoto.objects.all()
    serializer_class    = PaintingPhotoSerializer
    lookup_field        = 'id'
    permission_classes  = [IsOwnerOrReadOnly]
以下是paints/serializers.py中的相关代码

class PaintingPhotoSerializer(serializers.ModelSerializer):

    title_name              = serializers.CharField(source='title', read_only=True)
    photo_title_url         = serializers.HyperlinkedIdentityField(
                                view_name='paintings-api:photos-title-list',
                                read_only=True,
                                lookup_field='title_id'
                                )
    photo_specific_url      = serializers.HyperlinkedIdentityField(
                                    view_name='paintings-api:photos-specific-detail',
                                    read_only=True,
                                    lookup_field='id'
                                    )
    owner                   = serializers.SerializerMethodField(read_only=True)



    class Meta:
        model = PaintingPhoto

        fields =[
            'title_id',
            'src',
            'title_name',
            'photo_title_url',
            'photo_specific_url',
            'owner',
        ]

    def get_owner(self, obj):

        request = self.context['request']
        if request.user.is_authenticated:
            if obj.user == request.user:
                return True
        return False

非常感谢

错误非常明确:字段
title\u id
null
。你能用
绘画/视图.py
的代码更新你的问题吗?看来虫子在那儿。@Cartucho谢谢你。我已经在编辑中添加了它们。您的REST\u框架设置看起来如何?似乎当您要存储新照片时,
title\u id
字段为空。在调用
perform\u create
之前,您应该将标题存储在“标题表”中以获得有效的id,然后调用
serializer.save(user=self.request.user,title\u id=XXXXX)