Раскрывающиеся списки Htmx в форме затрагиваются, когда я добавляю несколько форм на одну страницуPython

Программы на Python
Ответить
Anonymous
 Раскрывающиеся списки Htmx в форме затрагиваются, когда я добавляю несколько форм на одну страницу

Сообщение Anonymous »

Я создаю приложение для отслеживания запасов. У этого приложения есть две стороны. Акции и распродажа.
  • Когда акция поступит в продажу, ей будет присвоен автоматически сгенерированный номер лота, а также номер единицы и комплекты единиц.
  • При добавлении продажи я использовал htmx, чтобы предоставить раскрывающийся список LOT на основе выбранного товара. Этот inturn дает значения-заполнители для номера единицы и доступных пакетов единиц, чтобы количество продаж не превышало числа для конкретного номера LOT.
    Проблемная область: при добавлении продажи я предоставил форму, которая динамически предоставляет раскрывающиеся списки и отправляет продажу одним нажатием кнопки. проблема возникает, когда я добавляю несколько форм продаж на одной странице. значения раскрывающегося списка переходят в разные формы и там неправильное число. Мне удалось изолировать номера ITEM и LOT, используя уникальные идентификаторы для конкретной формы, но номера единиц и пакеты единиц не работают, когда я использую уникальные номера, поскольку они сбрасываются до нуля, когда htmx вызывает изменение.
мой API в представлениях.py: первая часть вызывает форму, а последняя часть отправляет данные в хранилище.
@login_required
@permission_required('delivery.can_view_items', raise_exception=True)
def add_sales(request):

form = SalesForm()
unique_id = uuid.uuid4().hex # Generate a unique identifier for the form instance

# Detect HTMX GET requests
if request.method == "GET" and request.headers.get("HX-Request") == "true":
items = Inventory.objects.filter(id__in=Stock.objects.filter(Q(unit_numbers__gt=0) | Q(unit_bundles__gt=0)).values_list('item_id', flat=True).distinct())
companies = Customer.objects.all()
context = {'items': items, 'companies': companies, 'form': form, 'unique_id': unique_id}
return render(request, "delivery/partials/addsaleform.html", context)
# Normal GET: show full page
if request.method == "GET":
items = Inventory.objects.filter(id__in=Stock.objects.filter(Q(unit_numbers__gt=0) | Q(unit_bundles__gt=0)).values_list('item_id', flat=True).distinct())
companies = Customer.objects.all()
context = {'items': items, 'companies': companies, 'form': form, 'unique_id': unique_id}
return render(request, 'delivery/add_sales.html', context)

if request.method == "POST":
try:
data = request.POST
inventory_id = data.get('item')
lot_number = data.get('lot', None)
unit_numbers = int(data.get('unit_number', 0))
unit_bundles = int(data.get('unit_bundle', 0))
company = data.get('company', None)

# Get the Inventory object (if you need it)
inventory_obj = get_object_or_404(Inventory, id=inventory_id)

# Then get a Stock instance that refers to that inventory
# For example, you might pick the first available stock entry:
stock_obj = Stock.objects.filter(LOT_number=lot_number, item=inventory_obj).first()
if not stock_obj:
raise ValueError(f"No stock found for Inventory id {inventory_id}")

stock_obj.unit_numbers -= unit_numbers
stock_obj.unit_bundles -= unit_bundles
stock_obj.save()

# Create the Sale pointing to the stock_obj
sale = Sale(
item=stock_obj,
LOT_number=lot_number,
unit_numbers=unit_numbers,
unit_bundles=unit_bundles,
user=request.user,
company=company,
sale_date=now()

)
sale.save()

messages.success(request, "Sale added successfully.")
return redirect('sales')

except Exception as e:
messages.error(request, f"Failed to add sale: {e}")
return redirect('add_sales')
else:
form = SalesForm()

return render(request, 'delivery/add_sales.html', {'form': form})

Приведенный ниже шаблон вызывает форму, которая хранится в виде частичных файлов.
Add Sales

{% include 'delivery/partials/addsaleform.html'%}






+ Add Sales



Submit All

Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»