簡體   English   中英

將 Django 中的兩個模型查詢到一個查詢集中

[英]Query two models in Django into one queryset

我的 django 應用程序中有兩個模型:

class Person(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=100)
    persons = models.ManyToManyField(Person, related_name="books")

現在我需要創建一個視圖,它將對兩個模型進行一次正則表達式查詢,找到匹配的模型並將它們顯示在模板中。 如果我做:

class SearchListView(ListView):
    queryset = Person.objects.filter(name__icontains="a")
    book_queryset = Book.objects.filter(title__icontains="a")

我收到一條錯誤消息,指出 ListView 只接受一個查詢集。 此類問題的典型解決方案是什么?

你需要在這里做一些不同的事情:

class SearchListView(ListView):
    queryset = Person.objects.filter(name__icontains="a")

    def get_context_data(self, **kwargs):
        context = super(SearchListView, self).get_context_data(**kwargs)
        context['book_queryset'] = Book.objects.filter(title__icontains="a")
        return context

然后在您看來,您可以執行以下操作:

{% for object in object_list %}
    <p>{{object}}</p>
{% endfor %}
{% for object in book_queryset %}
    <p>{{object}}</p>
{% endfor %}

您使用的方式不起作用的原因是因為ListViewMultipleObjectMixin繼承了queryset屬性,並且該屬性傳遞給模板中的object_list上下文變量,這在幕后發生,如果您想將更多上下文變量傳遞給模板您需要遵循我分享的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM