Форум сайта python.su
Здравствуйте. Есть шаблон с таблицей. Мне нужно во view обработать выбранную строку таблицы. Можно, конечно, передать id этой строки, но не хочется делать лишний запрос к базе, когда нужные данные уже в таблице. Можно ли передать нужную строку в виде словаря? Типа
one_row={"id":123,"name":"колесо","price":321}
<a href="{% url 'edit_row' one_row %}"><span class="btn btn-default glyphicon glyphicon-pencil"></span></a>
def edit_row(request,one_row): <обрабатываем, получаем результат> return render(request, 'my_table.html', {"rez": rez})
urlpatterns = [ path('program/edit/<dict:one_row>', views.edit_row, name='edit_row'),]
Офлайн
1) Вопрос не вполне понятен. Что значит “передать строку в виде словаря”? Стрку можно передать как строку . Вероятно вы имели в виду запись базы данных, но тут возникает вопрос 2
2) Собственно GET запрос это и есть словарь по структуре, свойствам и поведению. Смотрите:
https://www.linux.org.ru/forum/general/15883443?cid=15883457
{'cid': 15883457} # это то же самое
id | Имя города | Население
1 | Москва | 20 000 000
1254 | Сосновка | 1058
< a href='http://my_site/page?city_id=1254&population=1058'>
Отредактировано FishHook (Сен. 4, 2020 10:51:57)
Офлайн
спасибо, что ответили! Я совсем начинающий, прошел пока только пару уроков (https://developer.mozilla.org и https://tutorial.djangogirls.org), решил сделать простенький сайт (в приложении).
Справа sidebar с формой, которая отображается при передаче id>=0 (сейчас там -1), слева форма-заголовок с выбранным полем для сортировки и поиском по нему и полем строки поиска. Ниже-таблица с данными. Для каждой записи 2 псевдокнопки (я выше писал).
Идея-не создавая класс формы (как я понял, ее нельзя впихнуть в sidebar, а мне это надо, потому что при создании или редактировании записи приходится сравнивать с уже имеющимися строками таблицы), получить данные о нужной записи+данные из формы-заголовка, чтобы после перерисовывания страницы у меня не сбросился сделанный выбор.
Сама таблица рисуется в отдельной функции, в которую передаются выбранное поле+строка поиска, а функция возвращает словарь со строками таблицы. Вся страница создается
return render(request, 'artikuls/art_tab.html', {"arts": rez, "dop": dop_rez})
Прикреплённый файлы:
pic.png (53,9 KБ)
Офлайн
Я честно говоря запутался что именно вы хотите сделать. Давайте по-порядку. Вопрос первый. Зачем вам нужна форма слева, там где написано “тут будет форма”, что эта форма должна передавать на сервер?
Офлайн
там будет редактироваться имеющаяся запись или создаваться новая. На скриншоте была нажата кнопка “+” для создания новой записи (таблица не изменилась, потому что эта кнопка-в форме, из которой request.GET может получить данные о фильтрации таблицы)
Прикреплённый файлы:
pic1.png (53,4 KБ)
Офлайн
mokynis
Ну так и ОК, создание или изменение данных это POST запрос, ваши параметры фильтрации хранятся в ссылке, и таким образом при передаче POST запроса по той же ссылке, вы не измените и не сбросите фильтры. То есть пока вы не делаете ГЕТ запросов ваши фильтры не изменяются.
Офлайн
1) данные о фильтрации хранятся в форме-заголовке, а кнопка, посылающая POST-запрос-в форме sidebar'а. Это разные формы
2) при сознании формы для ввода новой записи нажимается кнопка из формы-заголовка и, поэтому таблица перерисовывается согласно условий фильтрации (они хранятся в этой форме).
3) при попытке открыть в форме sidebar'а реальную строку таблицы, я не могу передать в функцию, выбирающую содержимое этой таблицы, условия, с которыми она была на момент нажатия кнопки, отфильтрована. И у меня она отображается вообще без фильтрации. Картинку могу приложить, просто сейчас там все закомментировано, не работает
Офлайн
вот картинки. Открываю вторую строку и получаю эту строку сбоку и совершенно не ту информацию в таблице
Прикреплённый файлы:
pic2.png (40,6 KБ)
Офлайн
картинки отправляются только по одной
Отредактировано mokynis (Сен. 4, 2020 14:08:13)
Прикреплённый файлы:
pic3.png (53,7 KБ)
Офлайн
mokynisобе формы генерируются вашим бэкендом, то есть джангой, засуньте в action обеих форм одинаковую ссылку
данные о фильтрации хранятся в форме-заголовке, а кнопка, посылающая POST-запрос-в форме sidebar'а. Это разные формы
Офлайн