) с использованием представления cancel_order и обработки отправки формы с помощью представления create_cancel для обновления Product_status CartOrder и CartOrderItems.
Однако проблема в том, что представление create_cancel не запускается при отправке формы. Сообщения об успехе или ошибке не отображаются, а база данных не обновляется. Просмотры:
Вот соответствующие представления:
Форма cancel-order.html отображается правильно: URL-адрес действия указывает на представление create_cancel.
При отправке формы представление create_cancel не запускается.
Сообщения об успехе или ошибках не отображаются.
Поля Product_status в базе данных не изменяются.
Ожидаемое поведение:
При отправке формы должно активироваться представление create_cancel, и оно должно обновить поля Product_status для CartOrder и связанных с ним CartOrderItems. Сообщения об успехе или ошибке должны отображаться соответствующим образом. Вопросы:
Что может быть причиной того, что представление create_cancel не срабатывает при отправке формы?
Есть ли какие-либо распространенные проблемы с отправкой формы или разрешением URL-адресов в Django, о которых я мог бы знать? упускать из виду?
Может ли это быть связано с тем, как Параметр oid передается в URL-адресе или как обрабатывается запрос POST?
[b]Описание проблемы:[/b] Я реализую функцию отмены заказа в своем приложении Django. Процесс включает в себя отображение формы отмены ([code]cancel-order.html[/code]) с использованием представления cancel_order и обработки отправки формы с помощью представления create_cancel для обновления Product_status CartOrder и CartOrderItems. Однако проблема в том, что представление create_cancel не запускается при отправке формы. Сообщения об успехе или ошибке не отображаются, а база данных не обновляется. [b]Просмотры:[/b] Вот соответствующие представления: [code]def cancel_order(request, oid): sub_category = SubCategory.objects.all() categories = Category.objects.prefetch_related('subcategories').order_by('?')[:4] wishlist = wishlist_model.objects.filter(user=request.user) if request.user.is_authenticated else None nav_category = Category.objects.filter(special_category=True).prefetch_related('subcategories').order_by('?')[:4] order = CartOrder.objects.get(user=request.user, id=oid) products = CartOrderItems.objects.filter(order=order)
# Calculate discounts for each product total_old_price = 0 total_price = 0
for item in products: product = item.product # Assuming a ForeignKey from CartOrderItems to Product qty = item.qty # Assuming a quantity field in CartOrderItems total_old_price += (product.old_price or 0) * qty total_price += (product.price or 0) * qty
# Calculate total discount percentage if total_old_price > 0: # Prevent division by zero discount_percentage = ((total_old_price - total_price) / total_old_price) * 100 else: discount_percentage = 0
# Fetch related CartOrderItems instances order_items = CartOrderItems.objects.filter(order=order_cancel) for item in order_items: item.product_status = "cancelled" item.save()
# Log the reason and description (if you want to save this somewhere) # Example: save to a cancellation model (optional) # CancellationReason.objects.create(order=order_cancel, reason=reason, description=description)
body { background-color: #f8f9fa; display: flex; justify-content: center; align-items: center; align-items: flex-start; /* Align items at the top to allow vertical scrolling */ min-height: 100vh;/* Ensure the body covers the viewport */ padding: 20px; }
function confirmAndSubmit() { document.querySelector('.cancel-order-form').submit(); }
[img]{{order.images}}[/img]
{% csrf_token %} Cancel Your Order
Order Number
Product Name
Product Price
Product Old Price
{% if order.size %}
Product Size
{% endif %}
Reason for Cancellation
Select a reason Order Delay Changed My Mind Found a Cheaper Option Other
Additional Comments
Go Back Submit
Are you sure to cancel the order? You are saving {{ discount_percentage }}% on this order.
No Yes
[/code] [b]Модели:[/b] Вот модели CartOrder и CartOrderItems: [code]STATUS_CHOICE = ( ("processing", "Processing"), ("shipped", "Shipped"), ("out_for_delivery", "Out for delivery"), ("delivered", "Delivered"), ("return_accepted", "Return Accepted"), ("pick_up", "Pick Up"), ("refund_completed", "Refund Completed"), ("cancelled", "Cancelled"), )
class CartOrder(models.Model): user = models.ForeignKey(CustomUser, on_delete=models.CASCADE) oid = ShortUUIDField(length=10, max_length=100, prefix="oid", alphabet="1234567890") product_status = models.CharField(max_length=50, choices=STATUS_CHOICE, default="processing") # Other fields...
class CartOrderItems(models.Model): order = models.ForeignKey(CartOrder, on_delete=models.CASCADE, related_name="items") product = models.ForeignKey(Product, on_delete=models.CASCADE) qty = models.PositiveIntegerField(default=1) product_status = models.CharField(max_length=50, choices=STATUS_CHOICE, default="processing") # Other fields... [/code] [b]URL-адреса:[/b] Вот шаблоны URL-адресов: [code]path("cancel_order/", cancel_order, name="cancel_order"), path("create_cancel/", create_cancel, name="create_cancel"), [/code] [b]Наблюдаемое поведение:[/b] [list] Форма cancel-order.html отображается правильно: URL-адрес действия указывает на представление create_cancel. [*]При отправке формы представление create_cancel не запускается. [*]Сообщения об успехе или ошибках не отображаются. [*]Поля Product_status в базе данных не изменяются. [/list] [b]Ожидаемое поведение:[/b] При отправке формы должно активироваться представление create_cancel, и оно должно обновить поля Product_status для CartOrder и связанных с ним CartOrderItems. Сообщения об успехе или ошибке должны отображаться соответствующим образом. [b]Вопросы:[/b] [list] [*]Что может быть причиной того, что представление create_cancel не срабатывает при отправке формы? [*]Есть ли какие-либо распространенные проблемы с отправкой формы или разрешением URL-адресов в Django, о которых я мог бы знать? упускать из виду? [*]Может ли это быть связано с тем, как Параметр oid передается в URL-адресе или как обрабатывается запрос POST? [/list]