Я пытаюсь показать пользователям варианты продукта, которые они выбрали. Пока код работает и сохраняет изменения в базе данных, я не могу показать их на своей странице html. Только :
отображается. Если я попробую {{ order_item.variation.all }}
, и он выдаст пустой набор запросов, например: <QuerySet []>
. И если я попробую {{ order_item.variation }}
, он скажет: products.Variation.None
. В чем проблема? Это то, как я это называю неправильно? Вот что я попробовал:
Мои модели.py:
class Variation(models.Model):
item = models.ForeignKey(Item, on_delete=models.CASCADE, null=True, blank=True)
variation_type = models.CharField(max_length=120, choices=VAR_TYPES, default='Size')
title = models.CharField(max_length=120, null=True, blank=True)
price = models.FloatField(null=True, blank=True)
is_available = models.BooleanField(default=True)
objects = VariationManager()
class OrderItem(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
item = models.ForeignKey(Item, on_delete=models.CASCADE)
variation = models.ManyToManyField(Variation)
quantity = models.IntegerField(default=1)
ordered = models.BooleanField(default=False)
class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
ref_code = models.CharField(max_length=20)
ordered = models.BooleanField(default=False)
items = models.ManyToManyField(OrderItem)
variation = models.ManyToManyField(Variation)
Мой заказ_суммария. html:
{% for order_item in object.items.all %}
<tbody>
<tr>
<th scope="row" class="border-0">
<div class="p-2">
<img src="{{ order_item.item.image_url }}" alt="" width="70" class="img-fluid rounded shadow-sm">
<div class="ml-3 d-inline-block align-middle">
<h5 class="mb-0"> <a href="{{ order_item.item.get_absolute_url }}" class="text-dark d-inline-block align-middle">{{ order_item.item.title }}</a>
{% if order_item.variation %}
<ul>
<h6>{{ order_item.variation.variation_type }} : {{ order_item.variation.title }}</h6>
</ul>
{% endif %}
</div>
</div>
</th>
Мои просмотры.py:
@login_required
def add_to_cart(request, slug):
item = get_object_or_404(Item, slug=slug)
order_item, created = OrderItem.objects.get_or_create(
item=item,
user= request.user,
ordered=False,
)
order_qs = Order.objects.filter(user=request.user, ordered=False)
if order_qs.exists():
order = order_qs[0]
if order.items.filter(item__slug=item.slug).exists():
order_item.quantity += 1
order_item.save()
messages.success(request, "Product quantity has been updated.")
else:
order.items.add(order_item)
messages.success(request, "Product added to cart.")
return redirect("order-summary")
else:
ordered_date = timezone.now()
order = Order.objects.create(user=request.user, ordered_date=ordered_date)
order.items.add(order_item)
messages.success(request, "Product added to cart.")
return redirect("order-summary")
return redirect("order-summary")
class OrderSummaryView(LoginRequiredMixin, View):
def get(self, *args, **kwargs):
try:
order = Order.objects.get(user=self.request.user, ordered=False)
context = {
'object': order
}
return render(self.request, 'orders/order_summary.html', context)
except ObjectDoesNotExist:
messages.warning(self.request, "You do not have an active order")
return redirect("/")