Search code examples
pythondjangomanytomanyfield

Django Framework ManyToManyField. How can i get a specific value in my index list page


I have problem with Django Framework, one blog post may have several tags, how can i get tags value of post list in my index page? I only can get one post's tag in a post detail page.

from django.db import models


# Create your models here.
class Tag(models.Model):
    tag_name = models.CharField(max_length=64)

def __unicode__(self):
    return self.tag_name


class Article(models.Model):
    title = models.CharField(max_length=100)
    category = models.CharField(max_length=50)
    tag = models.ManyToManyField(Tag, blank=True)
    publish_time = models.DateTimeField(auto_now_add=True)
    update_time = models.DateTimeField(auto_now=True)
    content = models.TextField()

    def __unicode__(self):
        return self.title

views.py:

def home(request):
posts = Article.objects.all().order_by('-publish_time')
paginator = Paginator(posts, 4)
page = request.GET.get('page')
try:
    post_list = paginator.page(page)
except PageNotAnInteger:
    post_list = paginator.page(1)
except EmptyPage:
    post_list = paginator.paginator(paginator.num_pages)
return render(request, 'home.html', {'post_list': post_list})

Solution

  • In template you can get all article's tags:

    {% for post in post_list %}
        {% for tag in post.tag.all %}
            Use your tags here
        {% endif %}
    {% endif %}