2012-01-27 7 views
24

Mam witrynę Django z systemem mini CMS, który zbudowaliśmy wewnętrznie lata temu, używa on postgresql. Podczas zapisywania prosty tytuł i akapit tekstu pojawia się następujący błąd:DatabaseError: zbyt długo wartość dla znaków typu zmiennego (100)

value too long for type character varying(100) 

Najdziwniejsze jest, a nie pojedyncza kolumna jest różny (100) wszystkie są 200 lub 250, a nawet domyślne te Django mieć został zmieniony ze 100 na 200 ze względu na re-opened ticket mentioned here

Czy ktoś wie o rozwiązaniu tego problemu?

Odpowiedz

37

Mogę postawić na zakład, że masz SlugField w/o z góry określoną długość? Ustaw to na 255 i migracja

+0

Masz to. Nie sądziłem, że to jest problem, ponieważ domyślnie Django przechowuje je jako zmienne (50), ale jedna z zależności w projekcie miała zmienny model (100) dla pól slug; Przeoczyłem to. – JeffC

+2

@michael, który był imponujący. Byłem utknięty. – harristrader

+0

Tak jak slug = models.SlugField (max_length = 255), a następnie migrować na heroku? –

13

To jest komunikat o błędzie z Postgres, a nie django.

Wydaje się, że zmieniłeś długość pola w models.py, ale to nie zmienia długości bazy danych, która została utworzona, gdy zrobiłeś manage.py syncdb.

Należy bezpośrednio zmienić długość pola w bazie danych.

+2

Nie zmieniłem ich tylko w modelach. Pobiegłem na południe, jak zwykle, gdy zmieniliśmy właściwości bazy danych, a my po migracji, dwukrotnie sprawdziliśmy wszystkie tabele ręcznie w postgresie i nie ma żadnych pozostałości po 100 zmiennych w dowolnym miejscu. Jestem zdezorientowany. – JeffC

0

uświadamiam sobie pytanie jest już odpowiedź, ale dla innych, które przychodzą tu patrząc na komunikat o błędzie:

w moim przypadku problemem było to, że moja nazwa tabeli przekroczyła 50 znaków. Najwyraźniej nie jest to dozwolone. Zmiana nazwy tabeli rozwiązała problem.

Czytaj więcej tutaj: https://code.djangoproject.com/ticket/18959

0

miałem podobny problem z Django autoslugfield używałem podobny pakiet, a następnie przełącza się na Django autoslugfield

ja otrzymuję ten błąd: value too long for type character varying(50)

pomimo faktu, że mój models.py przeszłości:

slug = AutoSlugField(max_length=255, populate_from='name', unique=True)

iw moim DB to typ był character varying 255

raz usunąć max_length=255 z pola tj

slug = AutoSlugField(populate_from='name', unique=True)

to działało dobrze

0

Michael Samoylov „s odpowiedź wskazał mnie właściwy kierunek. Pojawił się ten sam błąd, z wyjątkiem tego, że był z FileField.

Pola mają maksymalną długość, nawet jeśli nie określono jawnie maksymalnej długości. Zwiększ wartość, aby dane pasowały, aby uniknąć błędu.

W moim przypadku dane były zbyt duże, aby można je było racjonalnie przechowywać w bazie danych. Oparłem się na zapisaniu pliku na dysku, a następnie zapisaniu ścieżki pliku w bazie danych.

Powiązane problemy