ListView和get_queryset具有两个模型



我有两个模型需要进行搜索:

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 }}访问电影。

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

最新更新