Как использовать django-taggit Similar_objects () с представлениями на основе классов

Я хочу отобразить 4 связанных элемента в моем шаблоне, которые имеют те же теги, что и текущий элемент. Я использую большой пакет django-taggit, и я прочитал django-taggit doc

и они не объяснили, как использовать «similar_objects ()» для создания связанного элемента с представлениями на основе классов

мой views.py:

class GameDetail(DetailView):
    model = Game
    template_name = 'core/game_detail.html'
    context_object_name = 'game_detail'

мой models.py:

class Game(models.Model):
    name = models.CharField(max_length=140)
    developer = models.CharField(max_length=140)
    game_trailer = models.CharField(max_length=300, default="No Trailer")
    game_story = models.TextField(default='No Story')
    tags = TaggableManager()

мой шаблон "game_detail.html" очень длинный, чтобы разместить его здесь, если вы просто можете объяснить, как использовать django-taggit в моем представлении и как отображать связанный элемент в шаблоне, я буду благодарен


person DAMAR225    schedule 05.09.2018    source источник


Ответы (1)


Вы можете построить свое представление следующим образом:

class GameDetail(DetailView):
    model = Game
    template_name = 'core/game_detail.html'
    context_object_name = 'game_detail'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["related_items"] = self.object.tags.similar_objects()[:4]
        return context

Затем вы можете использовать список related_items в своем шаблоне, как обычно.

Примечание. если вы используете python2, вызов super должен быть таким:

context = super(self, GameDetail).get_context_data(**kwargs)
person dethos    schedule 06.09.2018
comment
спасибо за повтор, это выдает мне эту ошибку 'Game' object has no attribute 'similar_objects' - person DAMAR225; 06.09.2018
comment
Я обнаружил, что проблема должна быть self.object.tags.similar_objects()[:4] не self.object.similar_objects()[:4], пожалуйста, обновите свой ответ, чтобы я мог принять его - person DAMAR225; 06.09.2018
comment
Да, извините, забыл добавить поле, исправил. - person dethos; 06.09.2018