2016-04-22 10 views
-2

ich diese Situation haben:Zeige many-to-many-Felder in Vorlage

Modelle: -

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()]) 

Ich möchte mit Verleger

Vorlage in Vorlage Autoren Feld zeigen:

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

Benutzerdefinierte Vorlage Tags:

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

Was funktioniert nicht? – Sayse

Antwort

0

Ihr Filter ist völlig sinnlos. Um über die Autoren für einen Publisher zu iterieren, können Sie einfach {% for author in obj.author_set.all %} (vorausgesetzt, obj ist ein Publisher-Objekt, das Sie nicht angezeigt haben).

Es scheint hier jedoch nichts mit Beziehungen von Vielen zu Vielen zu tun zu haben.