Django psycopg2.errors.StringDataRightTruncation:对于类型字符变化的值太长(200)
Posted
技术标签:
【中文标题】Django psycopg2.errors.StringDataRightTruncation:对于类型字符变化的值太长(200)【英文标题】:Django psycopg2.errors.StringDataRightTruncation: value too long for type character varying(200) 【发布时间】:2021-04-03 04:29:06 【问题描述】:运行 django 应用时遇到上述错误。究竟需要改变什么? comment_body = models.TextField() 方面很可能是罪魁祸首,因为它存储了可以不同长度的 reddit cmets。当我做一个 git clone 并在我的本地运行它时,奇怪的是它可以工作。
模型.py
from django.db import models
# Create your models here.
class Subreddit(models.Model):
# Field for storing the name of a subreddit
subreddit_name = models.CharField(max_length=200, unique=True)
# Field for storing the time the model object was last saved
last_updated = models.DateTimeField(auto_now=True)
class Submission(models.Model):
subreddit = models.ForeignKey(Subreddit, on_delete=models.CASCADE)
# The Reddit submission id of the object
submission_id = models.CharField(max_length=200, unique=True)
# Reddit Submission URL
url = models.URLField(max_length=200)
# Reddit Submission Title
title = models.CharField(max_length=200)
class SubmissionComment(models.Model):
# Parent submission object
submission = models.ForeignKey(Submission, on_delete=models.CASCADE)
# Text of the comment
comment_body = models.TextField()
class Meme(models.Model):
memeurl = models.URLField(max_length=200)
编辑:
新的错误 post char 更改为 300,迁移在本地和 heroku 上运行。
【问题讨论】:
【参考方案1】:鉴于错误:value too long for type character varying(200)
,您应该查找 max_length
为 200 的模型字段。由于您有多个字段的 max_length 设置为 200,因此您需要确定哪个模型和字段引发错误。检查堆栈跟踪,运行调试器和/或插入一些调试print(instance.__dict__)
s。找到罪魁祸首后,将该字段的 max_length
扩展到更大的值或将其转换为 TextField
。
【讨论】:
感谢schillingt,发现其中一个问题有230个字符!在本地克隆应用程序,在模型中进行更改,然后在本地迁移,然后 heroku 推送,然后在 heroku 上迁移。仍然收到 500 服务器错误。知道这个新错误是什么意思吗? (添加截图) 在使用 Postgres 时几乎没有理由使用 CharField。 TextField 的性能同样出色。您可能只需要为管理员和表单指定一个小部件。以上是关于Django psycopg2.errors.StringDataRightTruncation:对于类型字符变化的值太长(200)的主要内容,如果未能解决你的问题,请参考以下文章