Django在基于类的通用列表视图中过滤子对象

log*_*gan 1 django foreign-key-relationship django-class-based-views

大家好日子!

我的应用程序使用了基于django类的通用列表视图.我有两个模型对象:通过外键链接的图书和发布者(下面的代码).我想使用ListView向发布商展示他们的图书,但过滤图书(只获取当前用户拥有的有效图书)

附加信息:如果可能的话,我不想在模板中使用过滤器.附加信息2:我不能在模型类中使用过滤器,因为我需要访问请求对象

models.py

class Publisher(models.Model):
    name = models.CharField(max_length=255)

class Book(models.Model):
    name = models.CharField(max_length=255)
    active = models.BooleanField(default=True)
    publisher = models.ForeignKey(Publisher, related_name='books')
    owner = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)

views.py

class ListBooksByPublisher(ListView):
    model = Publisher
    template_name = 'list.html'
    context_object_name = 'books'
Run Code Online (Sandbox Code Playgroud)

list.html

{% for publisher in publishers %}
    {{ publisher.name }}
    {% for book in publisher.books.all %}
        {{ book.name }}
    {% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢!

ple*_*ong 7

您需要覆盖视图上的get_queryset方法以返回自定义查询集

例如:

class ListBooksByPublisher(ListView):
    ....
    def get_queryset(self):
        return self.model.objects.filter(blablabla))
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助