heroku和django,类型字符变化的值太长(50)

时间:2012-06-01 19:06:10

标签: django heroku

我在syncdb上收到此错误:

  File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/models/manager.py", line 203, in _insert
    return insert_query(self.model, objs, fields, **kwargs)
  File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/models/query.py", line 1576, in insert_query
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 910, in execute_sql
    cursor.execute(sql, params)
  File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/backends/util.py", line 40, in execute
    return self.cursor.execute(sql, params)
  File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 52, in execute
    return self.cursor.execute(query, args)
django.db.utils.DatabaseError: value too long for type character varying(50)

创建此新模型后:

class Promocio(models.Model):
    codiIdioma = models.CharField(u"Codi de l'idioma",max_length = 10, choices = LANGUAGES, unique=True  )    
    headTxt = models.TextField( u"Text del títol",   help_text = u'''Text que apareixerà com a títol al missatge de promoció de la recollida de e-mails amb la tablet''' )
    bodyTxt = models.TextField( u"Text del cost del missatge" ,  help_text = u'''Text que apareixerà com al cos del missatge de promoció de la recollida de e-mails amb la tablet''')
    buttonTxt =  models.TextField( u"Text del butó d'OK",  help_text = u'''Text que apareixerà dins el butó de recollida de e-mails amb la tablet''' )
    codiOrdenacio = models.CharField(u"Codi d'ordenació",max_length = 10, blank = True, help_text = u"Codi alfanumèric per determinar quin idioma es presenta abans i quin després. Ex: 00AA" )  

    class Meta:
        ordering=['codiOrdenacio']
        db_table = u'promocions_tablet'
        verbose_name = u'Missatge de Promoció a mostrar a la tablet'
        verbose_name_plural = u'Missatges de Promoció a mostrar a la tablet'

要解决这个问题的一些想法?

1 个答案:

答案 0 :(得分:3)

syncdb期间自动创建的唯一对象是ContentType,但ContentType上的每个字段都允许100个字符,并且自Django的早期开始。 verbose_name用于内容类型上的name字段,但您的verbose_name虽然很长,但仍然只有50个字符。

除此之外,Django还会在每次运行initial_data时处理所有应用中的所有syncdb灯具。这就是我问你是否有任何原因的原因。如果这个特定的应用程序没有,那么必须有一些应用程序,某处确实有一个。此外,这可能包括INSTALLED_APPS中列出的第三方应用,因此您可能需要做一些事情。