Форум сайта python.su
вот ударился в оптимизацию и усовершенствования
есть код типа :
acc = accounts.objects.filter(account=332198)
if request.GET['Order_by'] == "poz_desc":
acc = accounts.objects.order_by("-name")
order_by_poz = "poz"
elif request.GET['Order_by'] == "poz":
acc = accounts.objects.order_by("name")
order_by_poz = "poz_desc"
if request.GET['Order_by'] == "poz_desc":
acc_filter = '.order_by("-name")'
order_by_poz = "poz"
elif request.GET['Order_by'] == "poz":
acc_filter = '.order_by("name")'
order_by_poz = "poz_desc"
acc = accounts.objects.filter(account=332198)%s % acc_filter
Офлайн
А кто мешает вам сделать так?
if request.GET['Order_by'] == "poz_desc":
sort_by = "-name"
order_by_poz = "poz"
elif request.GET['Order_by'] == "poz":
sort_by = "name"
order_by_poz = "poz_desc"
acc = accounts.objects.filter(account=332198).order_by(sort_by)
Офлайн
sort_by по умолчанию не должен существовать, то есть запрос должен выглядеть так:
accounts.objects.filter(account=332198).order_by()
Офлайн
sonniyА почему бы не проверить лично?
сделать нельзя(или можно?)
Офлайн
у меня тоже выдает, у меня даже все работает :)
моя проблема в том что я пытаюсь сделать фильтры/сортировки уже на сформировавшейся странице
по сути цель примитивная:
даем запрос -> получаем результат(таблицу) -> и дальше мы должны дать возможность сортировать по столбцам А-я и Я-а
по средствам шаблона(я имею ввиду “reversed”) можно это сделать но только относясь к первому столбцу, можно попробовать извращаться с шаблоном( и думаю что добиться можно результата), но неужели нет другого способа более оптимистичного и оптимизированного ?
Офлайн
Может вам стоит посмотреть в сторону джаваскрипта? (думаю неплохое решение в случае если отсутствует деление на страницы)
Ну или как вариант, указывайте сразу в GET запросе тип сортировки и вставляете его в order_by.
Офлайн
по идее так должно работать. Не претендую на звание лучшего решения, но один раз приходилось использовать такой подход. а так стараюсь избегать подобных методов.
acc = exec('accounts.objects.filter(account=332198)%s' %acc_filter)
Офлайн
fthпо сути я так и делаю и скажем так… первый раз проходит без проблем, я видимо не так изначально задумал проверки на наличие изменений в GET/POST запросах, ну да ладно как все доделаю напишу решение,вдруг кому поможет.
Ну или как вариант, указывайте сразу в GET запросе тип сортировки и вставляете его в order_by.
Офлайн
syncdb не изменяет существующие таблицы, только создаёт отсутствующие.
Поэтому либо руками допиливайте базу данных, либо удаляйте таблицы и делайте syncdb.
Офлайн
так я допилял :)в общем есть две таблицы accounts и actions:
в моделе actions прописал поле
ac = models.ForeignKey(accounts)
>>>from mysite.myapp.models import accounts, actions
>>>a = actions.objects.get(id=4306)
>>>a.ac_id.name #вот тут должен быть мега фокус вызывающий нужную строку из другой таблицы, но я увы получаю следующее :
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'long' object has no attribute 'name'
Офлайн