Как можно фильтровать, чтобы отображать только продажи для транзакций, которые принадлежат зарегистрированному пользователю в представлении на основе класса инфраструктуры django - PullRequest
1 голос
/ 22 апреля 2019

представление на основе класса


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)

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Вам нужно использовать 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 1006 *

0 голосов
/ 22 апреля 2019

Мы можем отфильтровать набор запросов следующим образом:

from django.contrib.auth.mixins import LoginRequiredMixin

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

    def get_queryset(self):
        return super().get_queryset().<b>filter(transaction__owner=self.request.user)</b>

Таким образом, мы здесь фильтруем набор запросов таким образом, что получаем только Sale s, для которых у transaction есть owner, то есть self.request.user: зарегистрированный пользователь.

LoginRequiredMixin полезен тем, что нельзя получить доступ к данному представлению, если он / она не вошел в систему. В этом случае система вернет перенаправление на страницу входа.(или другую страницу, если вы укажете это).

...