Если в админке открыть список записей какой-либо таблицы, то они отображаются корректно. Но если щелкнуть на запись, для того, чтобы получить доступ к остальным ее полям то появляется ошибка:
TemplateSyntaxError at /admin/Books/review/43/
Caught UnicodeEncodeError while rendering: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128)
Здравствуйте, DemAS, Вы писали:
DAS>Если в админке открыть список записей какой-либо таблицы, то они отображаются корректно. Но если щелкнуть на запись, для того, чтобы получить доступ к остальным ее полям то появляется ошибка:
DAS>Запись в базу данных осуществляется так: DAS>
class Review(models.Model):
title = models.CharField(max_length = 50)
review_id = models.IntegerField()
book_id = models.IntegerField()
link = models.CharField(max_length = 100)
content = models.TextField()
rating = models.IntegerField()
author = models.CharField(max_length = 50)
Соответственно, на форме http://127.0.0.1:8000/admin/books/reviews/ для каждой записи у меня отображается поле title. При щелчке на этот title открывается карточка со всеми полями выбранной записи.
Если title содержит кирилические символы, то при открытии карточки записи я получаю ошибку. Если не содержит — то ошибки нет. Не смотря на то, что в поле Content есть кирилица.
Отсюда у меня возникло подозрение, что проблема в том, что кирилица именно в том поле, которое отображается в списке записей и я стал пытаться протолкнуть в это поле любое другое (пусть даже фиктивное поле).
Сначала я вынес числовые поля вперед, предположив что в списиок попадает первое поле:
class Review(models.Model):
review_id = models.IntegerField()
book_id = models.IntegerField()
title = models.CharField(max_length = 50)
link = models.CharField(max_length = 100)
content = models.TextField()
rating = models.IntegerField()
author = models.CharField(max_length = 50)
Снес старую базу данных, синхронизировал — все по прежнему — title в списке.
Добавил новое фиктивное поле, которое просто заполняю статичным значнием 'latin':
class Review(models.Model):
latin = models.CharField(max_length = 50)
review_id = models.IntegerField()
book_id = models.IntegerField()
title = models.CharField(max_length = 50)
link = models.CharField(max_length = 100)
content = models.TextField()
rating = models.IntegerField()
author = models.CharField(max_length = 50)
но все равно в списке записей отображается поле title
Здравствуйте, DemAS, Вы писали:
DAS>Здравствуйте, Daevaorn, Вы писали:
D>>В базу нужно складывать уникодные объекты, а не байтовые строки. encode лишний
DAS> Поправил, но результат остался прежним.
крутится под чем?
у меня была проблема с тем, что у апача была некорректная локаль, рецепт на джанговики был, сейчас найти чтот не могу
Здравствуйте, DemAS, Вы писали:
DAS>Здравствуйте, kochetkov.vladimir, Вы писали:
DAS> Да, спасибо. Помогло. DAS> А это стандартный хак? Почему это в настройки не вынесено?
В моем случае у меня просто метод __str__() у модели был перекрыт.
Более грамотно можно сделать так: в файле admin.py в приложении реализовать еще один класс и зарегистрировать его примерно так:
from django.contrib import admin
from models import Review
class ReviewAdmin(admin.ModelAdmin):
list_display = ('book_id', 'review_id', 'title')
admin.site.register(Review, ReviewAdmin)