Home > Net >  How to show history of orders for user in Django
How to show history of orders for user in Django

Time:12-29

I will pin some screenshots of my template and admin panel I have history of orders in admin panel but when im trying to show title and img of order product in user profile in my template that`s not working and i got queryset Im sorry for russian words in my site, i can rescreen my screenshots if you need that

models.py

class Order(models.Model):
    user = models.ForeignKey(User, on_delete=models.PROTECT, related_name='orders', verbose_name='Заказы',
                             default=1)
    username = models.CharField(max_length=50, verbose_name='Имя пользователя')
    email = models.EmailField()
    vk_or_telegram = models.CharField(max_length=255, verbose_name='Ссылка для связи', default='vk.com')
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    paid = models.BooleanField(default=False, verbose_name='Оплачено')

    class Meta:
        ordering = ['-created',]
        verbose_name = 'Заказ'
        verbose_name_plural = 'Заказы'


    def __str__(self):
        return 'Заказ {}'.format(self.id)


    def get_cost(self):
        return sum(item.get_cost() for item in self.items.all())


class OrderItem(models.Model):
    order = models.ForeignKey(Order, related_name='order', on_delete=models.CASCADE)
    product = models.ForeignKey(Posts, related_name='order_items', on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=10, decimal_places=2)

    def __str__(self):
        return '{}'.format(self.id)

    def get_cost(self):
        return self.price


views.py

@login_required
def profile(request):
    user_orders = Order.objects.filter(user=request.user)

    data = {
        'user_orders': user_orders,
    }
    return render(request, 'store/main_pages/profile.html', data)

order history template:

{% for item in user_orders %}
    {{ item }}
    {{ item.order.all }}
{% endfor %}

Profile template admin order panel

CodePudding user response:

Create a model for storing the orders. This model should have fields for storing information about the order, such as the total cost, the date the order was placed, and the status of the order.

Create a view that will display the order history for a user. This view should retrieve all of the orders for the logged-in user from the database and pass them to a template.

Create a template to display the order history. This template should loop through the list of orders passed to it by the view and display the relevant information for each order.

Add a URL pattern to your Django project's urls.py file that maps to the view that displays the order history.

Add a link to the order history page in your application's navigation menu or elsewhere on the site.

CodePudding user response:

In user_orders = Order.objects.filter(user=request.user) you have all of the user's order histories. when sending these data to the front, don't use {{ item.order.all }}

each of your items is an order.

  • Related