надеюсь, кто-нибудь поможет мне решить мою проблему.Так как недавно я столкнулся с проблемой с моим кодом, я не мог понять, почему он не работает, даже если мне кажется, что все в порядке.Я хочу дать возможность обновить количество в корзине, но я могу сделать это только со стороны администратора, а не из почтового запроса с формой.
Я уже пробовал много примеров, которые я нашел в Интернете, но ничего не кажетсяисправить мой.когда я отправляю количество, я могу увидеть данные, которые я отправляю с терминала, выполнив печать (request.POST), но не идет к администратору, чтобы обновить количество корзины.
Сигнал длясохранить:
def m2m_changed_cart_receiver(sender, instance, action, *args, **kwargs):
print("hello depuis le model")
if action == 'post_add' or action == 'post_remove' or action == 'post_clear':
bustravels = instance.bustravels.all()
#busquantity = BusCart.objects.get(booking_seats_num=1)
total = 0
for x in bustravels:
total += x.price
if instance.subtotal != total:
instance.subtotal = total
instance.save()
m2m_changed.connect(m2m_changed_cart_receiver, sender=BusCart.bustravels.through)
def pre_save_cart_receiver(sender, instance, *args, **kwargs):
if instance.subtotal > 0:
instance.total = Decimal(instance.subtotal) * Decimal(1.015) # 1.5% tax
else:
instance.total = 0.00
pre_save.connect(pre_save_cart_receiver, sender=BusCart)
Вот мой код модели:
class Entry(models.Model):
bustravels = models.ForeignKey(BusTravels, null=True, on_delete='CASCADE')
bus_cart = models.ForeignKey(BusCart, null=True, on_delete='CASCADE')
booking_seats_num = models.PositiveIntegerField(default=1, blank=True, null=True)
def __str__(self):
return "This entry contains {} {}(s).".format(self.booking_seats_num, self.bustravels)
@receiver(post_save, sender=Entry)
def update_cart(sender, instance, **kwargs):
item = instance.booking_seats_num * instance.bustravels.price
instance.bus_cart.subtotal += item
instance.bus_cart.booking_seats_num += instance.booking_seats_num
instance.bus_cart.updated = datetime.now()
Модель корзины:
class BusCart(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
bustravels = models.ManyToManyField(BusTravels, blank=True)
booking_seats_num = models.PositiveIntegerField(default=1)
subtotal = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
total = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
updated = models.DateTimeField(auto_now=True)
timestamp = models.DateTimeField(auto_now_add=True)
objects = BusCartManager()
ModelManager:
class BusCartManager(models.Manager):
def bus_new_or_get(self, request):
bus_cart_id = request.session.get('bus_cart_id', None)
qs = self.get_queryset().filter(id=bus_cart_id)
if qs.count() == 1:
bus_new_obj = False
bus_cart_obj = qs.first()
if request.user.is_authenticated and bus_cart_obj.user is None:
bus_cart_obj.user = request.user
bus_cart_obj.save()
#print("Cart id exists")
else:
bus_cart_obj = BusCart.objects.bus_new_cart(user=request.user)
bus_new_obj = True
request.session['bus_cart_id'] = bus_cart_obj.id
return bus_cart_obj, bus_new_obj
def bus_new_cart(self, user=None):
user_obj = None
if user is not None:
if user.is_authenticated:
user_obj = user
return self.model.objects.create(user=user_obj)
mymodelForm для публикации данных:
class BusQuantityForm(forms.ModelForm):
PRODUCT_QUANTITY_CHOICES = [(i, str(i)) for i in range(1, 71)]
booking_seats_num = forms.TypedChoiceField(label='Number of places', choices=PRODUCT_QUANTITY_CHOICES, coerce=int, required=False)
class Meta:
model = Entry
fields = ['booking_seats_num',] #'bustravels', 'bus_cart', ]
и это мое мнение:
form = BusQuantityForm(request.POST, request.FILES or None)
# if request.method == 'POST':
if form.is_valid():
print(request.POST)
bus_travels_id = request.POST.get('bus_travels_id')
booking_seats_num = request.POST.get('booking_seats_num')
if bus_travels_id is not None:
bus_cart_obj, bus_new_obj = BusCart.objects.bus_new_or_get(request)
bus_travels_obj = BusTravels.objects.get(id=bus_travels_id)
#Entry.objects.create(bus_cart=bus_cart_obj, bustravels=bus_travels_obj, booking_seats_num=booking_seats_num)
# bus_cart_obj.bustravels.add(bus_travels_obj) # bus_cart_obj.bustravels.add(bus_travels_id)
# added = True
# bus_travels_id = request.POST.get('bus_travels_id')
instance = form.save(commit=False)
instance.booking_seats_num = booking_seats_num
instance.bustravels = bus_travels_obj
instance.bus_cart = bus_cart_obj
instance.save()
и мои шаблоны:
<td>
<form action="{% url 'bus_cart_home' %}" method="POST">
{% csrf_token %} <input type="hidden" name="bustravels" value="{{ product }}" readonly>
<input type="hidden" name="bus_cart" value="{{ bus_cart }}" readonly>
{{ form.booking_seats_num|as_crispy_field }}
<input type="submit" value="Updated" class="btn btn-info" style="background-color: #0c1836;">
</form>
</td>
Как я уже сказал, у меня естьПопробуйте много способов, чтобы решить эту проблему, прежде чем я пришел сюда, чтобы попросить помощи для моей проблемы, я пробовал много способов, но у меня все еще нет того, что я хочу, чтобы обновить количество корзины.
Так что любая помощь будет очень признательна.
Заранее спасибо.