我在删除一个模型(我们称之为a)的实例时遇到了一个问题,该模型有一个与by Foreign Key约束相关的另一个模型(B)的实例,并且无法删除。它使用了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',)
型号.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',)
序列化程序.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')
我的完美场景:我希望能够发送一个特定任务模型的删除请求,该请求将删除与其相关的每个步骤模型。你知道吗
我很感激任何帮助!你知道吗
回溯
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.
过了一会儿,我发现我处理问题的方法不对。。。这不是代码的错-工作正常。问题与通过pgAdmin设置的数据库有关。一旦放弃Django项目并重新迁移,一切看起来都很好。你知道吗
相关问题 更多 >
编程相关推荐