У меня проблема с удалением экземпляра модели (назовем его A), у которого есть экземпляр другой модели (B), связанной с A ограничением внешнего ключа, и не удаляется.Он использует параметр CASCADE, однако я получаю ответ 500, который в трассировке просто говорит, что сервер потерпел крах / база данных перешла в режим восстановления.
Ниже мой код:
просмотров.py
class TaskInstance(generics.RetrieveUpdateDestroyAPIView):
"""
Returns Task instance
"""
queryset = Task.objects.all()
serializer_class = TaskSerializer
class StepList(generics.ListCreateAPIView):
"""
List all Steps (OR for specified task), or create a new one
"""
queryset = Step.objects.all()
serializer_class = StepSerializer
filter_fields = ('task',)
models.py
class Category(models.Model):
name = models.CharField(max_length=25, blank=False)
class Meta:
ordering = ('id',)
class Task(models.Model):
name = models.CharField(max_length=25, blank=False)
cat = models.ForeignKey(Category, related_name='tasks', on_delete=models.CASCADE)
class Meta:
ordering = ('id',)
class Step(models.Model):
name = models.CharField(max_length=25, blank=False)
completed = models.BooleanField(blank=True, default=False)
task = models.ForeignKey(Task, related_name='steps', on_delete=models.CASCADE)
class Meta:
ordering = ('id',)
serializers.py
class CategorySerializer(serializers.ModelSerializer):
tasks = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = Category
fields = ('id', 'name', 'tasks')
class TaskSerializer(serializers.ModelSerializer):
steps = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = Task
fields = ('id', 'name', 'steps')
class StepSerializer(serializers.ModelSerializer):
task = serializers.PrimaryKeyRelatedField(queryset=Task.objects.all(), many=False)
class Meta:
model = Step
fields = ('id', 'name', 'completed')
Мой идеальный сценарий: Я бы хотел иметь возможность отправить запрос DELETE для конкретной модели задачи, которая удаляет каждую относящуюся к ней модель шага.
Буду признателен за любую помощь!
Traceback
OperationalError at /task/1/
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Request Method: DELETE
Request URL: http://localhost:7000/task/1/
Django Version: 2.1.3
Python Executable: C:\Users\vaida\Documents\Coding\android-tm-api\venv\Scripts\python.exe
Python Version: 3.7.1
Python Path: ['C:\\Users\\vaida\\Documents\\Coding\\android-tm-api\\android_tm_api', 'C:\\Users\\vaida\\Documents\\Coding\\android-tm-api\\venv\\Scripts\\python37.zip', 'C:\\Users\\vaida\\Documents\\Coding\\android-tm-api\\venv\\DLLs', 'C:\\Users\\vaida\\Documents\\Coding\\android-tm-api\\venv\\lib', 'C:\\Users\\vaida\\Documents\\Coding\\android-tm-api\\venv\\Scripts', 'c:\\users\\vaida\\appdata\\local\\programs\\python\\python37\\Lib', 'c:\\users\\vaida\\appdata\\local\\programs\\python\\python37\\DLLs', 'C:\\Users\\vaida\\Documents\\Coding\\android-tm-api\\venv', 'C:\\Users\\vaida\\Documents\\Coding\\android-tm-api\\venv\\lib\\site-packages']
Server time: Fri, 16 Nov 2018 20:05:14 +0000
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'api.apps.ApiConfig',
'django_filters']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\backends\base\base.py" in _commit
239. return self.connection.commit()
The above exception (server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
) was the direct cause of the following exception:
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\transaction.py" in __exit__
212. connection.commit()
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\backends\base\base.py" in commit
261. self._commit()
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\backends\base\base.py" in _commit
239. return self.connection.commit()
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\utils.py" in __exit__
89. raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\backends\base\base.py" in _commit
239. return self.connection.commit()
During handling of the above exception (server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
), another exception occurred:
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\backends\base\base.py" in ensure_connection
216. self.connect()
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\backends\base\base.py" in connect
194. self.connection = self.get_new_connection(conn_params)
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\backends\postgresql\base.py" in get_new_connection
178. connection = Database.connect(**conn_params)
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\psycopg2\__init__.py" in connect
130. conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
The above exception (server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
) was the direct cause of the following exception:
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\core\handlers\exception.py" in inner
34. response = get_response(request)
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\core\handlers\base.py" in _get_response
126. response = self.process_exception_by_middleware(e, request)
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\core\handlers\base.py" in _get_response
124. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\views\decorators\csrf.py" in wrapped_view
54. return view_func(*args, **kwargs)
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\views\generic\base.py" in view
68. return self.dispatch(request, *args, **kwargs)
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\rest_framework\views.py" in dispatch
495. response = self.handle_exception(exc)
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\rest_framework\views.py" in handle_exception
455. self.raise_uncaught_exception(exc)
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\rest_framework\views.py" in dispatch
492. response = handler(request, *args, **kwargs)
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\rest_framework\generics.py" in delete
293. return self.destroy(request, *args, **kwargs)
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\rest_framework\mixins.py" in destroy
93. self.perform_destroy(instance)
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\rest_framework\mixins.py" in perform_destroy
97. instance.delete()
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\models\base.py" in delete
880. return collector.delete()
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\models\deletion.py" in delete
306. sender=model, instance=obj, using=self.using
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\transaction.py" in __exit__
256. connection.set_autocommit(True)
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\backends\base\base.py" in set_autocommit
394. self.ensure_connection()
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\backends\base\base.py" in ensure_connection
216. self.connect()
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\utils.py" in __exit__
89. raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\backends\base\base.py" in ensure_connection
216. self.connect()
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\backends\base\base.py" in connect
194. self.connection = self.get_new_connection(conn_params)
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\db\backends\postgresql\base.py" in get_new_connection
178. connection = Database.connect(**conn_params)
File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\psycopg2\__init__.py" in connect
130. conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
Exception Type: OperationalError at /task/1/
Exception Value: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.