Skip to content
Snippets Groups Projects

Add endpoints to PUT/PATCH a model

Merged Valentin Rigal requested to merge model-update into master
All threads resolved!

Merge request reports

Checking pipeline status.

Approval is optional

Merged by Erwan RouchetErwan Rouchet 1 year ago (Nov 14, 2023 4:33pm UTC)

Merge details

  • Changes merged into master with baa13a2c (commits were squashed).
  • Deleted the source branch.

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
  • changed milestone to %Arkindex 1.5.3

  • Valentin Rigal requested review from @erouchet

    requested review from @erouchet

  • assigned to @vrigal

  • mentioned in merge request frontend!1588 (merged)

  • Valentin Rigal added 2 commits

    added 2 commits

    • a6506b59 - 1 commit from branch master
    • 099e03fc - Add endpoints to PUT/PATCH a model

    Compare with previous version

    • Resolved by Valentin Rigal

      There is a unique constraint on Model.name and the serializer is not properly checking it. When I update the name of a model to the name of another existing model, I get an HTTP 500:

      Traceback (most recent call last):
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/db/backends/utils.py", line 89, in _execute
          return self.cursor.execute(sql, params)
      psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "unique_model_names"
      DETAIL:  Key (name)=(aaaaa) already exists.
      
      
      The above exception was the direct cause of the following exception:
      
      Traceback (most recent call last):
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/core/handlers/exception.py", line 56, in inner
          response = get_response(request)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
          response = wrapped_callback(request, *callback_args, **callback_kwargs)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/views/decorators/csrf.py", line 55, in wrapped_view
          return view_func(*args, **kwargs)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/views/generic/base.py", line 103, in view
          return self.dispatch(request, *args, **kwargs)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/rest_framework/views.py", line 509, in dispatch
          response = self.handle_exception(exc)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/rest_framework/views.py", line 469, in handle_exception
          self.raise_uncaught_exception(exc)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
          raise exc
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/rest_framework/views.py", line 506, in dispatch
          response = handler(request, *args, **kwargs)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/drf_spectacular/utils.py", line 448, in wrapped_method
          return method(self, request, *args, **kwargs)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/rest_framework/generics.py", line 255, in put
          return self.update(request, *args, **kwargs)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/rest_framework/mixins.py", line 68, in update
          self.perform_update(serializer)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/rest_framework/mixins.py", line 78, in perform_update
          serializer.save()
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/rest_framework/serializers.py", line 200, in save
          self.instance = self.update(self.instance, validated_data)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/rest_framework/serializers.py", line 983, in update
          instance.save()
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/db/models/base.py", line 812, in save
          self.save_base(
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/db/models/base.py", line 863, in save_base
          updated = self._save_table(
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/db/models/base.py", line 976, in _save_table
          updated = self._do_update(
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/db/models/base.py", line 1040, in _do_update
          return filtered._update(values) > 0
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/db/models/query.py", line 1216, in _update
          return query.get_compiler(self.db).execute_sql(CURSOR)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1822, in execute_sql
          cursor = super().execute_sql(result_type)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1398, in execute_sql
          cursor.execute(sql, params)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/debug_toolbar/panels/sql/tracking.py", line 252, in execute
          return self._record(super().execute, sql, params)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/debug_toolbar/panels/sql/tracking.py", line 177, in _record
          return method(sql, params)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/db/backends/utils.py", line 102, in execute
          return super().execute(sql, params)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/db/backends/utils.py", line 67, in execute
          return self._execute_with_wrappers(
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
          return executor(sql, params, many, context)
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/db/backends/utils.py", line 84, in _execute
          with self.db.wrap_database_errors:
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/db/utils.py", line 91, in __exit__
          raise dj_exc_value.with_traceback(traceback) from exc_value
        File "/home/lucidiot/.virtualenvs/backend/lib/python3.10/site-packages/django/db/backends/utils.py", line 89, in _execute
          return self.cursor.execute(sql, params)
      django.db.utils.IntegrityError: duplicate key value violates unique constraint "unique_model_names"
      DETAIL:  Key (name)=(aaaaa) already exists.
  • Valentin Rigal added 2 commits

    added 2 commits

    • 54d84185 - Add endpoints to PUT/PATCH a model
    • 074c318c - Ensure name is unique at serializer level

    Compare with previous version

  • Valentin Rigal resolved all threads

    resolved all threads

  • Erwan Rouchet
  • Erwan Rouchet resolved all threads

    resolved all threads

  • merged

  • Please register or sign in to reply
    Loading