Django-теги показывают только теги отфильтрованных элементов

Мне было интересно, как вы можете отфильтровать объект в Django-теги.

Например, если вы написали статью, а статус по-прежнему draft Вы, очевидно, не хотите показывать их, пока статья не была переведена в живое состояние.

Вы делаете это в {% tags_for_model products.Widget as widget_tags %} или есть другой способ?

2 ответа

Решение

Вы можете сделать это, используя в своем представлении creation_for_model вы можете добавить фильтры, например:

Tag.objects.usage_for_model(ModelClass, filters={"status":1})

или создайте версию tags_for_model, которая принимает фильтры

Вы не фильтруете объекты, из которых извлекаются теги в тегах шаблона. Я не нашел прямой способ иметь теги для

Product.objects.filter(draft= False)

То, что я хотел бы сделать, это создать модель прокси-продукта, такого как Опубликовано продукт

class PublishedProduct(Product):
    objects = PublishedProductManager()
    class Meta:
        proxy = True

и затем установите его менеджер по умолчанию для возврата подмножества из фильтра (например, filter(draft= False))

class PublishedProduct(models.Manager):
    def get_query_set(self):
        return super(PublishedProduct, self).get_query_set().filter(draft= False)
Другие вопросы по тегам