django.db.utils.IntegrityError

来源:6-11 用户评论动态

Otiose

2020-12-30

老师,不知道为什么我的评论功能有点异常,有些评论可以发布,但是有些评论却弹框报错。

以下是我的报错信息:
图片描述

图片描述

以下是我数据库中的news_news('动态’是动态内容,'aaa’和’aaaaa’是已经正常发出去的评论,然后现在再发一条评论就报错了):
图片描述

以下是我的视图函数:
图片描述

news/models

class News(models.Model):
    uuid_id = models.UUIDField(primary_key=True, default=uuid.uuid4(), editable=False)
    user = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL,
                             related_name='publisher', verbose_name='用户')
    parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE,
                               related_name='thread', verbose_name='自关联')
    content = models.TextField(verbose_name='动态内容')
    liked = models.ManyToManyField(User, related_name='liked_news', verbose_name='点赞用户')
    reply = models.BooleanField(default=False, verbose_name='是否为评论')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')

    class Meta:
        verbose_name = '首页'
        verbose_name_plural = verbose_name
        ordering = ('-created_at',)

    def __str__(self):
        return self.content

    def switch_like(self, user):
        """点赞或取消赞"""
        if user in self.liked.all():
            self.liked.remove(user)
        else:
            self.liked.add(user)

    def get_parent(self):
        """返回自关联中的上级记录或者本身"""
        if self.parent:
            return self.parent
        else:
            return self

    def reply_this(self, user, text):
        """
        回复首页的动态
        :param user: 登录的用户
        :param text: 回复的内容
        :return: None
        """
        parent = self.get_parent()
        News.objects.create(
            user=user,
            content=text,
            reply=True,
            parent=parent
        )

    def get_thread(self):
        """关联到当前记录的所有记录"""
        parent = self.get_parent()
        return parent.thread.all()

    def comment_count(self):
        """评论数"""
        return self.get_thread().count()

    def count_likers(self):
        """点赞数"""
        return self.liked.count()

    def get_likers(self):
        """所有的点赞用户"""
        return self.liked.all()
写回答

2回答

Otiose

提问者

2021-01-01

问题解决了,原来是模型中的uuid.uuid4()出了问题,去掉括号就解决了……老师我这里顺便问一下这里加不加括号的区别是什么呢?毕竟之前一直带着这个错误也是可以实现功能的

0
1
Jack
哈哈,这坑我录课的时候也踩过。default值传递函数名,sql语句被执行的时候相当于带()了,如果uuid4()()就会报错。与这个字段无关的功能不影响。
2021-01-01
共1条回复

Jack

2020-12-31

您好,报错内容是说主键有重复值,可能是模型类哪些写错了,麻烦贴一下news/models.py的完整代码,用代码插入格式哈。

另外,返回动态的评论是这样的:

//img.mukewang.com/szimg/5fedd22209f5388910040345.jpg

但这个不像是报错原因

0
3
Otiose
写的tests_models也是报的同样的错……一个都跑不通
2021-01-01
共3条回复

Django高级实战 开发企业级问答网站

融合Django高级用法/算法/设计模式/TestCase测试/云计算打造项目

900 学习 · 756 问题

查看课程

相似问题