Застрял на создании фильтра постов в 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> правильно.

Вернуться на верх