Найти - Пользователи
Полная версия: Вычисляемое поле в классе модели
Начало » Django » Вычисляемое поле в классе модели
1
Nick2009
При выводе в шаблоне запроса из базы данных возникла проблема.
Нельзя делать отсечение, а мне нужно вывести подстроку из большого текста.
В качестве решения можно было бы создать в классе модели переменную и сохранять в нее это отсечение во время запроса.
Только чтобы в базе не сохранять.

Попробовал тупо:
class MyTable(models.Model):
bigtext=models.CharField()
subtext=this.bigtext[0:30]
Ошибок не выдает, но и не работатет.

Как это реализовать?
Lolka
А что за БД? У меня кое-что похожее в Postgres'e работает так:
create TRIGGER tsvectorupdate before insert or update on programmes_programm for each row execute procedure tsvector_update_trigger(title_tsv,
'pg_catalog.russian', title);
Александр Кошелев
Nick2009
Нельзя делать отсечение, а мне нужно вывести подстроку из большого текста.
Что значит нельзя? Фильтры slice или truncatewords пробовали?
Nick2009
Попробовал тупо:
А кроме “тупо” чем ещё вы руководствовались, писав такой код? Что такое this и как вы думали это будет работать? Просто интересно.
Lolka
А что за БД? У меня кое-что похожее в Postgres'e работает так:
Что за ужас? Никому это не показывайте больше!
denz
Nick2009
subtext=this.bigtext[0:30]
И тут мне показалось, что я чегото не знаю про Django….или про python …
Что такое `this`?????? И как это не матюкается? Даже я матюкнулся когда этот код увидел.
Может ты просто забыл подключить приложение с этой моделью в settings.INSTALLED_APPS?

Если решать на уровне django сервера, то надо писать както так:
class MyTable(models.Model):
bigtext=models.TextField()

@property
def subtext(self):
return self.bigtext[:30]
Но все дело в том, что если поля реально большие и проблемные, то в плане оптимизации работы с SQL сервером такой метод будет равносильным обращению к первому полю, т.к. изначально все равно будет выдергиваться строка с сервера, а потом с помощью приведенного метода - обрезаться.
Nick2009
denz
Nick2009
subtext=this.bigtext[0:30]
И тут мне показалось, что я чегото не знаю про Django….или про python …
Что такое `this`?????? И как это не матюкается? Даже я матюкнулся когда этот код увидел.
Может ты просто забыл подключить приложение с этой моделью в settings.INSTALLED_APPS?

Если решать на уровне django сервера, то надо писать както так:
class MyTable(models.Model):
bigtext=models.TextField()

@property
def subtext(self):
return self.bigtext[:30]
Но все дело в том, что если поля реально большие и проблемные, то в плане оптимизации работы с SQL сервером такой метод будет равносильным обращению к первому полю, т.к. изначально все равно будет выдергиваться строка с сервера, а потом с помощью приведенного метода - обрезаться.
Ошибок не выдавал, т.к. я забыл перезапустить апачи…
Пока сделал так
class MyTable(models.Model):
bigtext=models.TextField()
subtext=''
и потом во вьюхе делаю
 for r in qs:
r.subtext=r.bigtext[:30]
Мне оба текста в шаблоне одновременно нужны, но я не знаю как по другому сделать отсечение в шаблоне. Может быть для этого есть специальный тег?

Вариант с property мне понравился. Спасибо!
Nick2009
Daevaorn
Фильтры slice или truncatewords пробовали?
Нет.
Александр Кошелев
Nick2009
Нет.
Так зря. Они для того и есть.
Nick2009
Daevaorn
Так зря. Они для того и есть.
Ага, переделываю. Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB