【问题标题】:Django hitcount order_by("hit_count_generic__hits") gives error on PostgreSQL databaseDjango hitcount order_by("hit_count_generic__hits") 在 PostgreSQL 数据库上给出错误
【发布时间】:2020-05-15 19:56:19
【问题描述】:

我使用django-hitcont 来计算我的帖子模型的浏览量。我正在尝试使用此查询objects.order_by('hit_count_generic__hits') 在我的 ListView 中获得观看次数最多的帖子,它在 SQLite 上运行良好,但在 PostgreSQL 上,它给了我这个错误: django.db.utils.ProgrammingError: operator does not exist: integer = text LINE 1: ...R JOIN "hitcount_hit_count" ON ("posts_post"."id" = "hitcoun....

models.py

class Post(models.Model, HitCountMixin):
    author = models.ForeignKey(User, related_name='authors', on_delete=models.CASCADE)
    title = models.CharField('Post Title', max_length = 150)
    description = models.TextField('Description', max_length=1000, blank = True)
    date_posted = models.DateTimeField('Date posted', default = timezone.now)
    date_modifed = models.DateTimeField('Date last modified', default = timezone.now)
    document = models.FileField('Document of Post', upload_to='documents', \
     validators=[FileExtensionValidator(allowed_extensions = ['pdf', 'docx']), validate_document_size] \
    )
    hit_count_generic = GenericRelation(
    HitCount,
    object_id_field='object_pk',
    related_query_name='hit_count_generic_relation'
   )

views.py

queryset = Post.objects.order_by('hit_count_generic__hits') 

我在 Github 上发现了与该问题相关的 this issue,但我仍然无法找出上述解决方法。

【问题讨论】:

  • 能否提供 HitCountModified 模型?我猜连接语句上的字段类型不匹配。
  • @DenizKaplan 我的错,它只是 HitCount。在我的数据库中,object_pk 是文本类型,应该是整数。我需要的是一种将 HitCount object_pk 更改为整数的方法,但我不知道如何在我的项目中修改 HitCount 的字段。

标签: django postgresql github hitcounter


【解决方案1】:

当比较不同的类型(在本例中为整数和文本)时,equals 运算符会抛出此异常。要解决此问题,请将 HitCount 模型 pk 字段转换为整数,您就可以开始了。为此,您需要创建并应用迁移操作。 Django 是一个非常好的框架来处理这种操作。您只需要检查值不为空并且“可转换”为整数。只需更改字段类型并运行以下两个命令即可。

python manage.py makemigrations
python manage.py migrate

在更新您的模型之前,我强烈建议您进行备份以防出现故障。这不是一个简单的操作,但您可以按照这些链接了解在此过程中发生了什么。 migrationsdump and restore initial data 如果您不关心表上的数据,只需删除表并创建一个全新的迁移文件并重新创建表。

【讨论】:

  • 目前有效。但是有没有办法在不更改命中计数器库的情况下做到这一点,因为运行“pip install requirements.txt”将覆盖未来的更改。或者,我必须等待图书馆所有者解决此问题。
  • 你需要等待补丁或者你可以在你的需求文件中指定一个工作版本。据我从项目 github 页面阅读,最好选择第二个选项。您也可以自行 fork 项目并进行更新。
猜你喜欢
  • 2013-01-20
  • 2022-12-15
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 1970-01-01
  • 2011-09-05
相关资源
最近更新 更多