Django - Сбой ограничения NOT NULL: account_userprofile.user_id - PullRequest
0 голосов
/ 06 марта 2020

Я работаю над проектом django, и у меня есть UserProfile, который выглядит следующим образом:

class UserProfile(models.Model):
    user                = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile', on_delete=models.CASCADE)
    image               = models.ImageField(upload_to=upload_image_path,null=True,blank=True, default="")
    username            = models.CharField(max_length=200,null=True,blank=True)

    def get_absolute_url(self):
        return reverse_lazy("accounts:detail", kwargs={"username":self.user.username})

Это подробный вид профиля пользователя:

class UserDetailView(RetrieveUpdateAPIView):
    queryset = User.objects.all()
    serializer_class = UserThumbSerializer
    renderer_classes = [TemplateHTMLRenderer]
    lookup_field = 'username'
    template_name = "userprofile.html"

    def get(self, request, username=None):
        user_ = get_object_or_404(User, username=username)
        image = user_.profile.image
        serializer=UserThumbSerializer()
        return Response({'serializer':serializer,'image':image})

    def post(self, request, username=None):
        user_ = get_object_or_404(User, username=username)
        image = user_.profile.image
        serializer = UserThumbSerializer(data=request.data)
        if not serializer.is_valid():
            return Response({'fields':serializer,'image':image})
        serializer.save()
        return redirect('/')

Это сериализатор для образа userprofile

class UserThumbSerializer(ModelSerializer):
    class Meta:
        model = UserProfile
        fields = ['image']

Это форма для обновления образа userprofile:

<form  method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {% render_form serializer %}
    <input type="submit" value="Send">
</form>

Я хочу обновить изображение UserProfile, но я получаю эту ошибку:

Сбой ограничения NOT NULL: accounts_userprofile.user_id

Traceback (most recent call last):
  File "C:\...\lib\site-packages\django\db\backends\utils.py", line 86, in _execute
    return self.cursor.execute(sql, params)
  File "C:\...\lib\site-packages\django\db\backends\sqlite3\base.py", line 396, in execute
    return Database.Cursor.execute(self, query, params)

The above exception (NOT NULL constraint failed: accounts_userprofile.user_id) was the direct cause of the following exception:
  File "C:\...\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\...\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\...\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\...\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\...\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\...\lib\site-packages\rest_framework\views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "C:\...\lib\site-packages\rest_framework\views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "C:\...\lib\site-packages\rest_framework\views.py", line 476, in raise_uncaught_exception
    raise exc
  File "C:\...\lib\site-packages\rest_framework\views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "C:\...\accounts\views.py", line 56, in post
    serializer.save()
  File "C:\...\lib\site-packages\rest_framework\serializers.py", line 212, in save
    self.instance = self.create(validated_data)
  File "C:\...\lib\site-packages\rest_framework\serializers.py", line 948, in create
    instance = ModelClass._default_manager.create(**validated_data)
  File "C:\...\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\...\lib\site-packages\django\db\models\query.py", line 433, in create
    obj.save(force_insert=True, using=self.db)
  File "C:\...\accounts\models.py", line 103, in save
    super(UserProfile,self).save(*args, **kwargs)
  File "C:\...\lib\site-packages\django\db\models\base.py", line 745, in save
    self.save_base(using=using, force_insert=force_insert,
  File "C:\...\lib\site-packages\django\db\models\base.py", line 782, in save_base
    updated = self._save_table(
  File "C:\...\lib\site-packages\django\db\models\base.py", line 887, in _save_table
    results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
  File "C:\...\lib\site-packages\django\db\models\base.py", line 924, in _do_insert
    return manager._insert(
  File "C:\...\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\...\lib\site-packages\django\db\models\query.py", line 1204, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
  File "C:\...\lib\site-packages\django\db\models\sql\compiler.py", line 1384, in execute_sql
    cursor.execute(sql, params)
  File "C:\...\lib\site-packages\django\db\backends\utils.py", line 100, in execute
    return super().execute(sql, params)
  File "C:\...\lib\site-packages\django\db\backends\utils.py", line 68, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "C:\...\lib\site-packages\django\db\backends\utils.py", line 77, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "C:\...\lib\site-packages\django\db\backends\utils.py", line 86, in _execute
    return self.cursor.execute(sql, params)
  File "C:\...\lib\site-packages\django\db\utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\...\lib\site-packages\django\db\backends\utils.py", line 86, in _execute
    return self.cursor.execute(sql, params)
  File "C:\...\lib\site-packages\django\db\backends\sqlite3\base.py", line 396, in execute
    return Database.Cursor.execute(self, query, params)

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...