我有主題模型和帖子模型。
我想使用查詢集進行搜索。當 q 有字串時它作業得很好,但是當 q = '' (這意味著 All )它不會顯示所有帖子。
我怎樣才能解決這個問題?
所有代碼在這里
模型.py
class Topic(models.Model):
name = models.CharField(max_length=200)
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User,on_delete=models.CASCADE)
topic = models.ForeignKey(Topic,on_delete=models.SET_NULL,null=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail',kwargs={'pk':self.pk})
視圖.py
class PostListView(ListView):
model = Post
template_name = 'blog/home.html'
context_object_name = 'posts'
ordering = ['-date_posted']
paginate_by = 5
def get_context_data(self, **kwargs):
context = super(PostListView, self).get_context_data(**kwargs)
context["topics"] = Topic.objects.all()
return context
def get_queryset(self):
if self.request.GET.get('q') != None:
q = self.request.GET.get('q')
else:
q = ''
# q = self.request.GET.get('q') if self.request.GET.get('q') != None else ''
return Post.objects.filter(topic__name__icontains=q).order_by('-date_posted')
uj5u.com熱心網友回復:
也許將您的get_queryset方法更改PostListView為:
def get_queryset(self):
q_param = self.request.GET.get('q')
if q_param:
return Post.objects.filter(topic__name__icontains=q_param).order_by('-date_posted')
# if q is empty this will return all objects
return Post.objects.all().order_by('-date_posted')
解決你的問題。
uj5u.com熱心網友回復:
您檢查真實性并在有真實性Post.objects.none()的情況下回傳:qFalse
def get_queryset(self):
q = self.request.GET.get('q')
if q:
return Post.objects.filter(topic__name__icontains=q).order_by('-date_posted')
else:
return Post.objects.none()
uj5u.com熱心網友回復:
試試這個
q = request.GET.get('search')
if q is not None and q != u"":
q = request.GET.get('search')
Post.objects.filter(topic__name__icontains=q).order_by('date_posted')
else:
Post.objects.all().order_by('date_posted')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/467682.html
標籤:Python django 列表显示 django-queryset
