具有两个模型的 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 }}
.
访问电影
如果您有任何问题,请告诉我。
我有 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 }}
.
如果您有任何问题,请告诉我。