具有两个模型的 ListView 和 get_queryset

ListView and get_queryset with two models

我有 2 个模型需要搜索:

class Movies(models.Model):
    title = models.CharField(max_length=100)

    class Meta:
        db_table = "movies"

    def __str__(self):
        return self.title


class Actors(models.Model):
    name = models.CharField(max_length=100)
    movies = models.ManyToManyField(Movies, related_name="actors")

    class Meta:
        db_table = "actors"

    def __str__(self):
        return self.name

我有一个搜索表单,需要在电影名称和演员姓名中进行搜索。我知道如何在一个模型中制作搜索视图:

class SearchView(ListView):
    template_name = "search_results.html"
    model = Actors

    def get_queryset(self):
        query = self.request.GET.get('q')
        object_list = Actors.objects.filter(name__icontains=query)
        return object_list

但是我想在两个模型中搜索怎么办? 结果应在模板中分别列出演员姓名和电影片名中出现的次数。如何轻松更新我的视图?

我试图添加一个方法 get_context_data 来扩展上下文,但不幸的是我不知道如何访问 get_query-set 中的第二个模型。我使用默认的 db.sqlite3.

非常感谢!

添加 get_context_data 函数是正确的,因为在 ListView 中,get_queryset 函数用于列表视图所基于的模型。这应该适用于 get_context_data 函数:

def get_context_data(self,*args,**kwargs):
   context = super(SearchView,self).get_context_data(*args,**kwargs)
   
   query = self.request.GET.get('q')
   movies = Movies.objects.filter(title__icontains=query)

   context['movies_list'] = movies
   return context

然后在您的模板中,您将通过上下文变量名称 {{ movies_list }}.

访问电影

如果您有任何问题,请告诉我。