如何过滤以仅显示基于django框架类的视图中属于登录用户的事务的销售额

问题描述 投票:1回答:2

基于类的视图


class SaleListView(ListView):
    model = Sale
    template_name = 'webapp/sale.html'
    context_object_name = 'sales'

事务模型 - 用户可以拥有许多事务


class Transaction(models.Model):
    currency = models.CharField(max_length=20)
    amount = models.IntegerField()
    total_price = models.DecimalField(max_digits=7, decimal_places=2)
    date_purchased = models.DateTimeField()
    note = models.TextField(default="")
    owner = models.ForeignKey(User, on_delete=models.CASCADE)

销售模式 - 交易可以有很多销售

class Sale(models.Model):
    amount_sold = models.IntegerField()
    total_price_sold = models.DecimalField(max_digits=7, decimal_places=2)
    date_sold = models.DateTimeField(default=timezone.now)
    note = models.TextField(default="")
    transaction = models.ForeignKey(Transaction, on_delete=models.CASCADE)

python django django-class-based-views
2个回答
0
投票

您需要使用get_queryset方法来更新查询集

class SaleListView(ListView):
    model = Sale
    template_name = 'webapp/sale.html'
    context_object_name = 'sales'

    def get_queryset(self, *args, **kwargs):
        qs = self.model.objects.filter(transaction__owner=self.request.user)
        return qs

docs


0
投票

我们可以过滤查询集,如:

from django.contrib.auth.mixins import LoginRequiredMixin

class SaleListView(LoginRequiredMixin, ListView):
    model = Sale
    template_name = 'webapp/sale.html'
    context_object_name = 'sales'

    def get_queryset(self):
        return super().get_queryset().filter(transaction__owner=self.request.user)

我们在这里过滤查询集,这样我们只获得Sales,其中相关的transaction有一个owner,即self.request.user:登录用户。

LoginRequiredMixin非常有用,如果他/她未登录,则无法访问给定视图。在这种情况下,系统将返回重定向到登录页面(如果您指定,则返回另一页面)。

© www.soinside.com 2019 - 2024. All rights reserved.