Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 08.04.2022
Сообщений: 11

Переход на неверный адрес

24.12.2023, 11:40. Показов 873. Ответов 1

Студворк — интернет-сервис помощи студентам
Дано задание разработать сервис для работы с БД ресторана на django. При нажатии на соответствующие кнопки/поля таблицы данных должна происходить переадресация на страницы с формами редактирования/добавления/удаления, но при любом взаимодействии с сайтом происходит переадресация лишь только на страницу добавления новых данных. Уже несколько часов пытаюсь найти причину такого поведения, но ничего не выходит. Ниже html разметка одной из страниц, вьюшки, формы и url-ы для работы с одной из таблиц БД.
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<body>
    {% include 'main/navbar.html' %}
    <h1>Рестораны</h1>
 
    <div class="add">
        <form method="post" action="{% url 'create_restaurant' %}">
            {% csrf_token %}    
            {{ form.as_p }}
            <button type="submit" class="btn btn-success">Добавить</button>
        </form>
    </div>
 
    <table class="table">
        <ul></ul>
        <thead>
            <tr>
                <th>Адрес</th>
                <th>Телефон</th>
                <th>Район доставки</th>
                <th>Меню</th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            {% for restaurant in restaurants %}
                <tr data-id="{{ restaurant.id }}">
                    <td class="editable-field" data-field="address">{{ restaurant.address }}</td>
                    <td class="editable-field" data-field="phone">{{ restaurant.phone }}</td>
                    <td class="editable-field" data-field="district">{{ restaurant.delivery_code.district }}</td>
                    <td class="editable-field" data-field="menu">{{ restaurant.menu_code.name }}</td>
                    <td>
                        <button class="btn btn-danger" data-toggle="modal" data-target="#confirmDeleteModal{{ restaurant.id }}">
                            Удалить
                        </button>
        
                        <!-- Модальное окно подтверждения удаления -->
                        <div class="modal" id="confirmDeleteModal{{ restaurant.id }}" tabindex="-1" role="dialog" aria-labelledby="confirmDeleteModalLabel" aria-hidden="true">
                            <div class="modal-dialog" role="document">
                                <div class="modal-content">
                                    <div class="modal-header">
                                        <h5 class="modal-title" id="confirmDeleteModalLabel">Подтверждение удаления</h5>
                                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                            <span aria-hidden="true">&times;</span>
                                        </button>
                                    </div>
                                    <div class="modal-body">
                                        Вы уверены, что хотите удалить ресторан "{{ restaurant.address }}"?
                                    </div>
                                    <div class="modal-footer">
                                        <button type="button" class="btn btn-secondary" data-dismiss="modal">Отмена</button>
                                        <form method="post" action="{% url 'delete_restaurant' restaurant.id %}">
                                            {% csrf_token %}
                                            {{ form.as_p }}
                                            <button type="submit" class="btn btn-danger">Удалить</button>
                                        </form>
                                        
                                    </div>
                                </div>
                            </div>
                        </div>
                    </td>
                </tr>
            {% endfor %}
        </tbody>
        
        
    </table>
    
   
    
    <!-- Модальное окно для редактирования ресторана -->
    <div class="modal" id="editRestaurantModal">
        <div class="modal-dialog">
            <div class="modal-content">
                <!-- Заголовок модального окна -->
                <div class="modal-header">
                    <h4 class="modal-title">Редактировать ресторан</h4>
                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                </div>
    
                <!-- Тело модального окна -->
                <div class="modal-body">
                    <form id="editRestaurantForm" method="post" action="{% url 'manage_restaurant' %}">
                        {% csrf_token %}
                        {{ form.as_p }}
                        <input type="hidden" name="restaurant_id" value="{{ current_restaurant.id }}">
                        <input type="submit" value="Сохранить">
                    </form>
                </div>
 
            </div>
        </div>
    </div>
    
<script>
    $(document).ready(function () {
        // Обработчик нажатия на ячейку таблицы
        $('.editable-field').on('click', function () {
            const restaurantId = $(this).closest('tr').data('id');
            const editFormUrl = `/manage_restaurant/${restaurantId}/`;
            console.log('editFormUrl:', editFormUrl);
 
            $('#editRestaurantForm').attr('action', editFormUrl);
 
            // Загрузка данных о ресторане в форму через AJAX
            $.get(editFormUrl, function (data) {
                // Вставляем данные в форму в модальное окно
                $('#editRestaurantModal').find('.modal-body').html(data);
            });
 
            // Отображение модального окна
            $('#editRestaurantModal').modal('show');
        });
 
        // Обработчик отправки формы редактирования
        $('#editRestaurantForm').submit(function (e) {
            e.preventDefault();
            const editFormUrl = $(this).attr('action');
            const formData = $(this).serialize();
            console.log('Form submitted!');
            console.log('editFormUrl:', editFormUrl);
            console.log('formData:', formData);
 
            $.ajax({
                type: 'POST',
                url: editFormUrl,
                data: formData,
                success: function () {
                    $('#editRestaurantModal').modal('hide');
                    // Может быть, обновите содержимое страницы после сохранения данных
                    location.reload();
                }
            });
        });
 
        // Обработчик нажатия на ячейку таблицы
        $('.editable-field').on('click', function () {
            const restaurantId = $(this).closest('tr').data('id');
            const editFormUrl = `/manage_restaurant/${restaurantId}/`;
            console.log('editFormUrl:', editFormUrl);
 
            // Загрузка данных о ресторане в форму через AJAX
            $.get(editFormUrl, function (data) {
                // Вставляем данные в форму в модальное окно
                $('#editRestaurantModal').find('.modal-body').html(data);
 
                // Отображение модального окна
                $('#editRestaurantModal').modal('show');
            });
        });
 
        // Обработчик выбора типа удаления
        $('input[name="delete_option"]').on('change', function () {
            const deleteOption = $(this).val();
            const formAction = $(this).closest('form').attr('action');
 
            // Обновляем action формы в зависимости от выбранного типа удаления
            const updatedAction = `${formAction}?delete_option=${deleteOption}`;
            $(this).closest('form').attr('action', updatedAction);
        });
    });
</script>
<!-- ... -->
 
    
    
    
    
    
    </body>
Вьюшки:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
def restaurant_list(request):
    restaurants = Restaraunts.objects.all()
    return render(request, 'main/restaurant_list.html', {'restaurants': restaurants})
 
def manage_restaurant(request, restaurant_id=None):
    if restaurant_id:
        restaurant = get_object_or_404(Restaraunts, pk=restaurant_id)
        form = RestaurantForm(request.POST or None, instance=restaurant)
 
        if request.method == 'POST':
            if 'delete' in request.POST:
                restaurant.delete()
                return redirect('restaurant_list')
            elif form.is_valid():
                form.save()
                return redirect('restaurant_list')
    else:
        form = RestaurantForm()
 
    return render(request, 'main/restaurant_list.html', {'form': form})
 
def create_restaurant(request):
    if request.method == 'POST':
        form = RestaurantForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('restaurant_list')
    else:
        form = RestaurantForm()
 
    return render(request, 'main/restaurant_list.html', {'form': form})
 
def delete_restaurant(request, restaurant_id):
    restaurant = get_object_or_404(Restaraunts, pk=restaurant_id)
 
    if request.method == 'POST':
        form = DeleteRestaurantForm(request.POST)
        if form.is_valid():
            delete_option = form.cleaned_data['delete_option']
 
            if delete_option == 'cascade':
                restaurant.delete()
            elif delete_option == 'set_null':
                # Установите поля delivery_code и menu_code на NULL
                restaurant.delivery_code = None
                restaurant.menu_code = None
                restaurant.save()
 
            return redirect('restaurant_list')
    else:
        form = DeleteRestaurantForm()
 
    return render(request, 'main/restaurant_list.html', {'form': form, 'restaurant': restaurant})
Формы:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
class RestaurantForm(forms.ModelForm):
    class Meta:
        model = Restaraunts
        fields = '__all__'  # Или перечислите нужные вам поля
 
 
class DeleteRestaurantForm(forms.Form):
    DELETE_CHOICES = [
        ('cascade', 'Каскадное удаление'),
        ('set_null', 'Установить ссылки на NULL'),
    ]
 
    delete_option = forms.ChoiceField(choices=DELETE_CHOICES, widget=forms.RadioSelect)
url-ы
Python
1
2
3
4
5
6
path('', restaurant_list, name='restaurant_list'),
    path('manage/', manage_restaurant, name='manage_restaurant'),
    path('manage_restaurant/<int:restaurant_id>/', manage_restaurant, name='manage_restaurant'),
    path('restaurants/manage/<int:restaurant_id>/', manage_restaurant, name='manage_restaurant'),
    path('restaurants/create/', create_restaurant, name='create_restaurant'),
    path('delete_restaurant/<int:restaurant_id>/', delete_restaurant, name='delete_restaurant'),
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.12.2023, 11:40
Ответы с готовыми решениями:

Неверный эффективный адрес
Задача состояла в том, чтобы подсчитать количество четных элементов двухмерного массива Программа выглядит так: section .data array...

Многопоточный сканер сети выдает неверный адрес
Добрый день, хотелось бы получить совет на счет следующей проблемы: Программа, загружает в list диапазон айпи в формате cidr. После...

Работа с ActionLink, неверный переход по ссылке
должен переходить на http://localhost:/Store/Details/id а переходит http://localhost:26641/Home/Details?Length=5 ...

1
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
25.12.2023, 08:14
Так как ты выводишь множество элементов в цикле, то у каждой формы должен быть id, кнопка в этой форме должна быть вязана с самой формой по id.

Python
1
2
3
4
5
                    <form id="form_id_{{restaurant.id}}" method="post" action="{% url 'delete_restaurant' restaurant.id %}">
                                            {% csrf_token %}
                                            {{ form.as_p }}
                                            <button type="submit" class="btn btn-danger" form="form_id_{{restaurant.id}}">Удалить</button>
                    </form>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.12.2023, 08:14
Помогаю со студенческими работами здесь

Код ошибки: DNS_PROBE_FINISHED_NXDOMAIN: Неверный DNS-адрес сервера
С недавнего времени перестал открываться один сайт, выдает вот эту ошибку. Остальные сайты открываются. На других компах этот сайт...

Множественная загрузка файлов на сервер, неверный адрес временного файла
Wordpress, jquery. Пытаюсь реализовать множественную, потоковую загрузку файлов на сервер на wordpress, с использованием этой статьи:...

Неверный переход курсора между компонентами по нажатию TAB
Добрый день! Создал форму JDialog. По нажатию кнопки TAB на клавиатуре должен осуществляться переход между компонентами, располагающимися...

Ошибка выполнения неверный адрес памяти или передача nil значения
Всем доброго времени суток, помогите разобраться в ошибке, буду очень признателен, вообщем обрабатываю форму на голэнге версия 1.13.5 ...

Переход на новый адрес
Есть массив из url-адресов, нужно пройти по всем и выполнить некоторый простой код. Как лучше всего организовать проход? Пробовал цикл, в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru