Застрял на создании фильтра постов в django
Мне нужно отфильтровать посты по выбранным параметрам между: "наиболее комментируемые" "категория" "дата". Вот собственно мой код:
модели:
class BlogPost(models.Model):
class BlogPostObjects(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(status='publicado')
options = (
('borrador', 'Borrador'),
('publicado', 'Publicado')
)
categoria = models.ForeignKey(BlogCategoria, on_delete=models.PROTECT,default=1)
titulo = models.CharField(max_length=250)
excerpt = models.TextField(null=True)
contenido = models.TextField()
slug = models.SlugField(max_length=250, unique_for_date='publicado',null=False, unique=True)
publicado = models.DateTimeField(default=timezone.now)
autor = models.ForeignKey(Usuario,on_delete=models.CASCADE,related_name="autor")
status = models.CharField(max_length=10,choices=options,default='borrador')
imagen = models.ImageField(default= "empty.jpg" ,null=True, blank = True)
objects = models.Manager()
postobjects = BlogPostObjects()
class Meta:
ordering = ('-publicado',)
db_table= "blog_post"
view:
class BlogInicio(ListView):
template_name = "Blog/blog_inicio.html"
model = BlogPost
context_object_name = "posts"
paginate_by = 9
def get_queryset(self):
return BlogPost.postobjects.all()
Объект фильтра, который вы предоставляете в контексте, является объектом, и язык шаблонов не может его интерпретировать.
Обычно вам нужно выполнить итерацию по набору запросов в вашем шаблоне:
{% for obj in filter.qs %}
# do something with obj
{% endfor %}
Для ваших нужд я бы рекомендовал вам выпадающее меню вместо поля ввода поиска:
<div class="col-md-10">
<select class="form-control mr-sm-2" name="name_categoria" id="categoria" placeholder="Ingrese nombre del producto...">
{% for obj in filter.qs %}
# Every obj is an instance of BlogCategoria
<option value="obj.name">obj.name</option>
{% endfor %}
</select>
</div>
Убедитесь, что вы назвали атрибуты <select-input>
и <option>
правильно.