Не работает нажатие кнопки в веб-приложении Python & Django
У меня было веб-приложение, разработанное другим человеком, который больше не хочет помогать с ошибками. У меня есть некоторый опыт, но, по-видимому, недостаточный для решения этой проблемы.
В веб-приложении есть кнопка, при нажатии на которую ничего не происходит. Она должна сохранять информацию о пользователе в базе данных. Я не понимаю, как событие щелчка связано с возможным файлом views.py.
В моем templates/add-inventory.html я вижу:
<a href="{% url 'crm:inventory' %}" class="btn btn-light rounded-pill me-1"> Cancel </a>
<button type="submit" class="btn btn-success rounded-pill"> Save </button>
Кнопка сохранения ничего не делает. Я вижу в файле views.py:
@login_required(login_url='crm:login')
@permission_required("crm.add_inventory", raise_exception=True)
def addInventory(request):
form = InventoryForm()
staff = User.objects.all().order_by('first_name')
vendor_form = VendorForm()
if request.method == 'POST':
form = InventoryForm(request.POST)
if form.is_valid():
inventory_instance = form.save()
if not request.POST.get('vendor'):
vendor_form = VendorForm(request.POST)
if vendor_form.is_valid():
vendor = vendor_form.save(commit=False)
vendor.added_by = request.user
vendor.save()
inventory_instance.vendor = vendor
inventory_instance.save()
stocks = request.POST.getlist('stock')
for i in range(len(staff)):
if int(stocks[i]) > 0:
InventoryStock.objects.create(
inventory = inventory_instance,
user = staff[i],
stock = stocks[i]
)
messages.success(request, 'Item added successfully')
return redirect('crm:inventory')
Как кнопка вызывает код в файле views.py? Любая помощь будет принята с благодарностью. Я загрузил все файлы локально и использую VS Code для отладки, но не достиг никакого прогресса.
Я добавил name=addInventory" в файл add-inventory.html, как показано ниже. Это ничего не дало.
<a href="{% url 'crm:inventory' %}" class="btn btn-light rounded-pill me-1"> Cancel </a>
<button type="submit" class="btn btn-success rounded-pill" name="AddInventory"> Save </button>
Ниже приведен код из файла urls.py, как и просили. Надеюсь, это та информация, которая вам была нужна.
path('inventory', inventory, name='inventory'),
path('inventory/add', addInventory, name='add-inventory'),
path('inventory/update/<int:pk>', updateInventory, name='update-inventory'),
path('inventory/delete/<int:pk>', deleteInventory, name='delete-inventory')
Полагая, что вы уже указали app_name = "crm"
в вашем urls.py
, вам нужно просто изменить url вашей кнопки на {% url 'crm:add-inventory' %}
имя, которое вы указали в вашем urls.py
файле.
Если вы уже настроили VSCode на отладку должным образом, вы должны иметь возможность поставить точки останова в представлении inventory
и в представлении addInventory
, вы заметите, что вызываете первую, поскольку ее имя - inventory
Более общее объяснение
Вот как работает django.
- Первый пользователь нажимает на
button / link
- Это
button or link
пост или запрос информации от конкретногоurl
- Этот url mast соответствует одному из django
urls.py
- Это
url
должно быть связано сview
внутриviews.py
, это представление является местом, где происходят реальные операции
Проблема может быть
- точка разрыва в приведенной выше связке.
Или
- ошибка в представлении/коде django
Ответ :-
По данной информации мы видим только 1,3,4 шаги.
- Мы не можем увидеть
post form
action value
в приведенной информации по вопросу.
Или
- мы не видим
javascript/jquery
код для пользовательской формыpost/upload
.
Один из них - обязателен.
Так,
выделите клапан действия post-формы и проверьте, совпадает ли он с клапаном из django urls.py
.
Или
Чек в пользовательской форме submit js/jquery код для валидного url.