python - 当我尝试删除帖子时,不断收到“IntegrityError FOREIGN KEY constraint failed”
问题描述
每次我尝试删除帖子时,我都会收到此错误,但我的删除按钮以前可以使用。我认为它与 on_delete 属性有关,但我改变了它的值几次,它仍然没有工作。
//模型.py
from django.db import models
from django.conf import settings
from django.urls import reverse
User = settings.AUTH_USER_MODEL
class PostManager(models.Manager):
def search(self, query):
qs = self.get_queryset().filter(title__icontains=query)
if qs:
return qs
return None
def get_by_id(self, id):
qs = self.get_queryset().filter(id=id)
if qs.count() == 1:
return qs.first()
else:
return None
# Create your models here.
class PostModel(models.Model):
user = models.ForeignKey(User, default=1, on_delete=models.CASCADE)
title = models.CharField(max_length=50)
message = models.TextField()
date = models.DateTimeField(auto_now_add=True)
likes = models.ManyToManyField(User, blank=True, related_name='post_likes')
def __str__(self):
return self.title
objects = PostManager()
def get_total_likes(self):
return self.likes.count()
def get_absolute_url(self):
return reverse("birdpost:detail", kwargs={"id": self.id})
def get_like_url(self):
return reverse("birdpost:like-toggle", kwargs={"id": self.id})
def get_delete_url(self):
return reverse("birdpost:delete_post", kwargs={"id": self.id})
//views.py
def del_post(request, id):
obj = get_object_or_404(PostModel, id=id)
if request.user != obj.user:
print("Ooh no looks like this post is not yours... ")
else:
obj.delete()
return redirect("home")
环境:
请求方法:GET 请求地址:http://localhost:8000/post/4/delete
Django 版本:2.2.1 Python 版本:3.6.8 已安装的应用程序:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'accounts',
'birdpost',
'search']
已安装的中间件:
['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']
追溯:
File "/home/grey/Desktop/python/birds/virtualenv/lib/python3.6/site-packages/django/db/backends/base/base.py" in _commit
240. return self.connection.commit()
The above exception (FOREIGN KEY constraint failed) was the direct cause of the following exception:
File "/home/grey/Desktop/python/birds/virtualenv/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)
File "/home/grey/Desktop/python/birds/virtualenv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
115. response = self.process_exception_by_middleware(e, request)
File "/home/grey/Desktop/python/birds/virtualenv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
113. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/grey/Desktop/python/birds/src/birdpost/views.py" in del_post
104. obj.delete()
File "/home/grey/Desktop/python/birds/virtualenv/lib/python3.6/site-packages/django/db/models/base.py" in delete
919. return collector.delete()
File "/home/grey/Desktop/python/birds/virtualenv/lib/python3.6/site-packages/django/db/models/deletion.py" in delete
318. sender=model, instance=obj, using=self.using
File "/home/grey/Desktop/python/birds/virtualenv/lib/python3.6/site-packages/django/db/transaction.py" in __exit__
240. connection.commit()
File "/home/grey/Desktop/python/birds/virtualenv/lib/python3.6/site-packages/django/db/backends/base/base.py" in commit
262. self._commit()
File "/home/grey/Desktop/python/birds/virtualenv/lib/python3.6/site-packages/django/db/backends/base/base.py" in _commit
240. return self.connection.commit()
File "/home/grey/Desktop/python/birds/virtualenv/lib/python3.6/site-packages/django/db/utils.py" in __exit__
89. raise dj_exc_value.with_traceback(traceback) from exc_value
File "/home/grey/Desktop/python/birds/virtualenv/lib/python3.6/site-packages/django/db/backends/base/base.py" in _commit
240. return self.connection.commit()
Exception Type: IntegrityError at /post/4/delete
Exception Value: FOREIGN KEY constraint failed
解决方案
我像@Na'aman Hirschfeld 所说的那样删除了 default=1 ,并删除了我所有的迁移和数据库。现在它工作正常。
推荐阅读
- ruby - 简单的程序,但非常卡住——Ruby 中的循环
- raspberry-pi3 - 尝试使用 DFRobot 红外摄像头寻找红外灯
- c++ - qt.bluetooth:虚拟后端运行。Qt 蓝牙模块在 Raspbian 上不起作用
- functional-programming - 函数式编程中的并行函数组合
- vue.js - 如何使用 vue svg loader 继承 svg 的 css 属性
- python - 为什么这个 de Bruijn 代码的最后几位总是返回 0
- docker - 是否可以从 Azure Pipelines 容器作业中运行 Docker 命令?
- jquery - 检查页面滚动何时到达多个不同的 div,动画计数器从 0 到文本元素
- python - “python中有没有像minifs和maxifs这样比较两个不同数据帧的函数
- python - 在 python 类中使用 Timer 对象会导致 TypeError NoneType