2016-04-22 95 views
-2

领域我有这种情况:显示许多一对多模板

型号: -

class Publisher(models.Model): 
    name = models.CharField(max_length=30) 
    address = models.CharField(max_length=50) 
    city = models.CharField(max_length=60) 
    state_province = models.CharField(max_length=30) 
    country = models.CharField(max_length=50) 
    website = models.URLField() 
    date = models.DateTimeField() 


    class Meta: 
     ordering = ["-name"] 

    def __unicode__(self):    # __unicode__ on Python 2 
     return self.name 

class Author(models.Model): 
    publisher = models.ForeignKey(Publisher) 
    salutation = models.CharField(max_length=10) 
    name = models.CharField(max_length=200) 
    email = models.EmailField() 
    headshot = models.ImageField(upload_to='author_headshots') 


    def __str__(self):    
     return self.name 


class Book(models.Model): 
    title = models.CharField(max_length=100) 
    authors = models.ManyToManyField('Author') 
    publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE) 
    publication_date = models.DateField() 

    def __str__(self): 
     return self.title 

    def get_authors(self): 
     return "\n".join([a.name for a in self.authors.all()]) 

我要显示在模板作者场出版商

模板:

{% for a in obj.pk|get_author %} 
    {{ a.name }}<br/> 
    {{ a.headshot }} 
{% endfor %} 

定制模板标签:

def get_author(pk): 
    try: 
     publisher = Publisher.objects.get(pk=pk) 
     print type(publisher) 
     author = Author.objects.filter(Publisher=publisher) 
     print author 
    except: 
     author = [] 
    return author 

register.filter('get_author', get_author) 
+0

什么不工作? – Sayse

回答

0

您的过滤器完全没有意义。为了遍历发布者的作者,您可以执行{% for author in obj.author_set.all %}(假设obj是Publisher对象,您尚未显示)。

尽管这里似乎没有任何与多对多关系有关的事情。