Привет, я новичок в структуре Django, и я столкнулся с этой проблемой в своем проекте магазина. Вот то, что я использовал request.session для хранения данных корзины, и я хотел очистить резервирование пользователей через некоторое время после того, как клиент выберет товар.
# Interacts with the database
def configure_db(chosen, item_id, quantity=1):
item = Item.objects.filter(id=item_id)
if chosen:
item.update(reservation=F('reservation') + quantity)
if not chosen:
item.update(reservation=F('reservation') - quantity)
# Main cart handler
def cart_manager(request):
data = json.loads(request.body)
itemId = int(data['itemId'])
action = data['action']
stock = int(data['stock'])
def clear_reservation(item_id):
for item in request.session['cart_items']:
if item_id == item['id']:
item['quantity'] -= 1
print("reservation cleared")
if request.session.has_key('cart_items'):
cart_items = request.session['cart_items']
for item in cart_items:
if itemId == item['id']:
if action == 'add' or action == 'increase':
reservation = Item.objects.get(id=itemId).reservation
if int(reservation) < stock:
item['quantity'] += 1
request.session['cart_quantity'] += 1
configure_db(True, itemId)
Timer(5.0, clear_reservation, [itemId]).start()
return JsonResponse("foo", safe=False)
Вот мой Javascript
function editCart(itemId, action, stock) {
let csrftoken = getCookie("csrftoken");
let itemData = JSON.stringify({
itemId: itemId,
action: action,
stock: stock,
});
fetch("http://127.0.0.1:8000/shop/editcart", {
method: "POST",
body: itemData,
headers: new Headers({
"content-type": "application/json",
"X-CSRFToken": csrftoken,
}),
})
.then((res) => {
return res.json();
})
.then((data) => {
location.reload();
});
}
Я обновлялся каждый раз, чтобы обновить информацию о клиентах на странице, но мой шаблон не знает об изменениях, сделанных функцией def cart_manager(request):
. Вот часть HTML, которую я использую для отображения количества товара в тележке в магазине
{% for item in all_items %}
<div class="item">
<div class="item-name">{{ item.name }}</div>
<div class="cart-data">
<div>You: {% for cart in request.session.cart_items %}
{% if cart.id == item.id %}{{cart.quantity}}{% endif %}
{% endfor %}</div>
</div>
</div>
{% endfor %}
Также, если это полезно, представление обрабатывается классом ниже, и я думаю, что это представление также не в курсе изменений. Заранее спасибо !!
class ItemPage(generic.DetailView):
model = Category
template_name = 'shop/shopitems.html'
context_object_name = 'category'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
category = context['category']
context['all_items'] = category.item_set.all()
return context