微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

外键约束失败

如何解决外键约束失败

我关注了 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}) 

models.py 评论功能

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 举报,一经查实,本站将立刻删除。