2015-03-24 10 views
7

Sadece bu iletiyi değil, ilgili tablo ve sütun adını almanın bir yolu var mı?Django ORM: DataBaseError sütununu alın

django.db.utils.DataError: value too long for type character varying(16) 

İlgili sütunu tahmin etmek veya araştırmak istemiyorum.

Biz Django 1.6 ve PostgreSQL kullanmak 9.3.6

Tam traceback

File "/home/f/local/lib/python2.7/site-packages/django/db/models/base.py", line 545, in save 
    force_update=force_update, update_fields=update_fields) 
    File "/home/f/local/lib/python2.7/site-packages/django/db/models/base.py", line 573, in save_base 
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) 
    File "/home/f/local/lib/python2.7/site-packages/django/db/models/base.py", line 654, in _save_table 
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) 
    File "/home/f/local/lib/python2.7/site-packages/django/db/models/base.py", line 687, in _do_insert 
    using=using, raw=raw) 
    File "/home/f/local/lib/python2.7/site-packages/django/db/models/manager.py", line 232, in _insert 
    return insert_query(self.model, objs, fields, **kwargs) 
    File "/home/f/local/lib/python2.7/site-packages/django/db/models/query.py", line 1514, in insert_query 
    return query.get_compiler(using=using).execute_sql(return_id) 
    File "/home/f/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 903, in execute_sql 
    cursor.execute(sql, params) 
    File "/home/f/local/lib/python2.7/site-packages/django/db/backends/util.py", line 69, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/home/f/local/lib/python2.7/site-packages/django/db/backends/util.py", line 53, in execute 
    return self.cursor.execute(sql, params) 
    File "/home/f/local/lib/python2.7/site-packages/django/db/utils.py", line 99, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/home/f/local/lib/python2.7/site-packages/django/db/backends/util.py", line 53, in execute 
    return self.cursor.execute(sql, params) 
django.db.utils.DataError: value too long for type character varying(16) 
+0

Lütfen tam hatayı ve geri dönüşü gösteriniz. –

+0

@DanielRoseman Traceback'i (django kısmı) ekledim. – guettli

+0

Benzer bir şey yaşadım ve bir tanesi benimkilerden ziyade bir üçüncü taraf uygulamasında bir alan üzerinde bir kısıtlama olmaktan çıktı. Bu olduğunda ne deniyorsun? –

cevap

2

basitçe öğrenmek için bir yol yoktur.

Django burada sadece DB ne diyor tırnak ve bu Postgres'e hatam:

db=> INSERT INTO db_accesskeys (key, link) VALUES ('AAAAA...', 'BBBBB...'); 
ERROR: value too long for type character varying(40) 

postgresql biri çok uzun olduğu söylemez, bu yüzden django bulabildiğim yolu yoktur, çok.

bir geçici çözüm max_length maç için el her giriş doğrulamak olacaktır (Gerçi django 1.6 üzerinde tam uygulanması konusunda emin değilim, bu 1.8 olduğunu):

def validate_length(model, field, value): 
    if len(value) > model._meta.get_field(field).max_length: 
     raise Exception(
      field + " of " + model._meta.model_name + " is too long (" + str(len(value)) + " > " + 
      str(model._meta.get_field(field).max_length) + ")" 
    ) 


validate_length(AccessKeys, "key", "AAAAAAA...") 
Exception: key of accesskeys is too long (109 > 40) 

Kursla geçimsiz olabilir alan adı uzunluğuna erişmeyi kolaylaştırmak veya tam olarak kaç karakter uzunluğuna sahip olduğunu görmek için gereksinimlerinize atılan istisnalar ...

+0

Postgre'lerin daha ayrıntılı olmalarını söylemenin bir yolu yok mu? – guettli

+1

@guettli Hata mesajlarındaki sütunu önermek şu anda psql geliştiricileri tarafından tartışılıyor ... –

İlgili konular