从 CharField 更改为 IntegerField - Postgres 列数据类型未更改 Django
Posted
技术标签:
【中文标题】从 CharField 更改为 IntegerField - Postgres 列数据类型未更改 Django【英文标题】:Changing from CharField to IntegerField - Postgres Column data type hasn't changed Django 【发布时间】:2020-03-21 08:41:27 【问题描述】:所以我从 sqlite 切换到 postgresql 来制作我的 django 评论网站 - 但由于 psql 是强类型的,我的代码有错误
LINE 1: ...Col1, (AVG(((("boards_review"."move_in_condition" + "boards_...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
所以我想我可以通过将 CharFields 更改为 IntegerFields 来更改类型以将类型更改为 int... 就像这样
move_in_condition = models.CharField(max_length=5,choices=RATING_CHOICES, blank=False, default='5')
treatment = models.CharField(max_length=5, choices=RATING_CHOICES, blank=False, default ="5")
response_speed = models.CharField(max_length=5, choices=RATING_CHOICES, blank=False, default ="5")
maintenance_quality = models.CharField(max_length=5, choices=RATING_CHOICES, blank=False, default ="5")
到
move_in_condition = models.IntegerField(choices=RATING_CHOICES, blank=False, default=5)
treatment = models.IntegerField(choices=RATING_CHOICES, blank=False, default =5)
response_speed = models.IntegerField(choices=RATING_CHOICES, blank=False, default =5)
maintenance_quality = models.IntegerField(choices=RATING_CHOICES, blank=False, default =5)
有选择:
class Review(models.Model):
RATING_CHOICES = (
(1, '1'),
(2, '2'),
(3, '3'),
(4, '4'),
(5, '5'),
)
但后来我在某处读到 sql 不直接支持将字符串列更改为 int 列....所以我仍然遇到同样的错误。我尝试删除我的数据库再次创建它,但迁移后我仍然遇到相同的错误。
我相信这是触发错误的位
def get_avg(self):
return self.reviews.annotate(
overall_rating = Sum(
F('move_in_condition') +
F('treatment') +
F('response_speed') +
F('maintenance_quality')
)/4).aggregate(
Avg('overall_rating'),
Avg('move_in_condition'),
Avg('treatment'),
Avg('response_speed'),
Avg('maintenance_quality')
)
但是,是的,我只是想显示几家公司的平均评论等,在尝试了几天后似乎无法弄清楚。提前致谢!
【问题讨论】:
你试过直接在查询中转换你的字段吗?就像这样:Avg(int('your_field'))
成功了!谢谢。
【参考方案1】:
正如曼努埃尔所说,刚刚添加了 int()!
def get_avg(self):
return self.reviews.annotate(
overall_rating = Sum(int(
F('move_in_condition') +
F('treatment') +
F('response_speed') +
F('maintenance_quality')
))/4).aggregate(
Avg('overall_rating'),
Avg('move_in_condition'),
Avg('treatment'),
Avg('response_speed'),
Avg('maintenance_quality')
)
【讨论】:
..你在哪里添加这个...显示内联代码。您可能想使用“...sn-p”.. 仅显示简短的代码和平,但请记住人们可以按照其放置的位置进行操作。 (审查结束)。【参考方案2】:你有一个转换问题,所以首先你需要回答,¿你真正需要的数据类型是什么?如果选择 CharField,您可以直接在查询中转换字段,就像这样:
Avg(int('your_field'))
【讨论】:
以上是关于从 CharField 更改为 IntegerField - Postgres 列数据类型未更改 Django的主要内容,如果未能解决你的问题,请参考以下文章
从 CharField 更改为 IntegerField - Postgres 列数据类型未更改 Django
仅将月份从'jan'更改为1,'feb'更改为2,'mar'更改为3 ...'dec'更改为12 [重复]