问题描述
我关注了 Coreys 博客应用,并集成了评论功能。我现在在尝试删除附有评论的评论时出现问题。
在 stackoverflow 上阅读了大约一百万个帖子后,大多数人会提到 USER on_delete,但我的似乎已经在 CASCADE 上了。
错误:
邮政
请求网址:http://127.0.0.1:8000/post/31/delete/
Django 版本:3.1.4
异常类型:IntegrityError
异常值:
外键约束失败
我应该能够创建一个帖子,让多个用户评论该帖子。然后,如果帖子的用户希望删除帖子,则应删除所有评论(显然 - 已添加级联)
models.py(后置函数)
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.Now)
author = models.ForeignKey(User,on_delete=models.CASCADE)
category = models.CharField(choices=cat_new_choice,max_length=200,default='Onboarding')
likes = models.ManyToManyField(User,related_name='blog_posts',blank=True)
#user who created this post,then the user gets deleted - what happens to the post? this will delete his post as well
def __str__(self):
return self.title
def total_likes(self):
return self.likes.all().count()
def get_absolute_url(self):
return reverse('post-detail',kwargs={'pk': self.pk})
class Comment(models.Model):
post = models.ForeignKey(Post,related_name="comments",on_delete=models.CASCADE)
body = models.TextField()
date_added = models.DateTimeField(auto_Now_add=True)
user = models.ForeignKey(User,on_delete=models.CASCADE )
def user_comment_post(sender,instance,*args,**kwargs):
comment = instance
post = comment.post
text_preview = comment.body[:90]
sender = comment.user
notify = Notification(post=post,sender=sender,user=post.author,text_preview=text_preview,notification_type=2)
notify.save()
def user_delete_comment(sender,**kwargs):
comment = instance
post = comment.post
sender = comment.user
notify = Notification.objects.filter(post=post,notification_type=2)
notify.delete()
views.py(删除视图)
class PostDeleteView(LoginrequiredMixin,UserPassesTestMixin,DeleteView):
model = Post
success_url = '/'
def test_func(self):
post = self.get_object()
if self.request.user == post.author:
return True
return False
post-detail.html(删除功能) {% if object.author == 用户 %}
<div class="float-right">
<br />
<a class="btn btn-secondary btn-sm " href="{% url 'post-update' object.id %}">Update</a>
<a class="btn btn-danger btn-sm " href="{% url 'post-delete' object.id %}">Delete</a>
</div>
{% endif %}
更新:所有notification.py
class Notification(models.Model):
NOTIFICATION_TYPES = (
(1,'Like'),(2,'Comment')
)
post = models.ForeignKey('blog.Post',on_delete=models.CASCADE,related_name="notif_post",blank=True,null= True)
sender = models.ForeignKey(User,related_name="notif_from_user")
user = models.ForeignKey(User,related_name="notif_to_user")
notification_type = models.IntegerField(choices= NOTIFICATION_TYPES)
text_preview = models.CharField(max_length=90,blank=True)
date = models.DateTimeField(auto_Now_add=True)
is_seen = models.BooleanField(default=False)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)