如何使用django-taggit获取相关的帖子/项目?

时间:2017-05-01 04:05:45

标签: python django django-taggit

我是django / python的新手,所以请耐心等待。

我想在django中创建某种“相关帖子”。我怎么能这样做?我正在关注此事:How to fetch related items when using taggit in django?

但不知道如何使用/实现它以及如何在模板中呈现它。这是我的观点:

def trip_list(request):
    trip_list = Trip.objects.filter(misc_published=True).order_by('-misc_published')[:12]
    related = Trip.objects.filter(tags=trip_list.tags.similar_objects())[:3]
    return render(request, 'app_trip/trip_list.html', {'trip_list': trip_list})

非常感谢任何帮助!

谢谢

-----------更新-----------

好的,在使用代码进行布线后,它似乎几乎成功了,但它是错误的:

  

/ trip / tour-island /

的ValueError      

无法查询“巴厘岛之旅”:必须是“标签”实例。

这是我更新的代码:

def trip_single(request, slug):
    trip = get_object_or_404(Trip, slug=slug)
    trip_related = Trip.objects.filter(misc_published=True, tags=trip.tags.similar_objects())[:3]
    return render(request, 'app_trip/trip_single.html', {'trip': trip}, {'trip_related': trip_related})

在模板中

{% for trip in trip_related %}
   <h1>{{ trip.title }}</h1>
{% endfor %}

谢谢

-----------更新[已解决!] -----------

使用model_name.tags.similar_objects()

在views.py 中:

def trip_single(request, slug):
    trip = get_object_or_404(Trip, slug=slug)
    trip_related = trip.tags.similar_objects() # Where the magic happen
    return render(request, 'app_trip/trip_single.html', {'trip': trip, 'trip_related': trip_related})

在模板中

{% for trip in trip_related %}
    <h1>{{ trip.trip_judul }}</h1>
{% endfor %}

谢谢!

1 个答案:

答案 0 :(得分:0)

similar_objects正在返回trip列表,您可以写下这句话:

trip_related = [a_trip 
                for a_trip in trip.tags.similar_objects() 
                if a_trip.misc_published
               ][:3]