2013-09-04 2 views
0

교수 웹 사이트의 작은 CMS를 작성하고 있는데 최근 발행물 목록이 포함되어 있습니다. 물론 기사를 표시 할 때 작성자는 알파벳순으로 정렬해서는 안되지만 그렇게 할 수는 없습니다. Django 다 대다 주문하기

class Author(models.Model): 
    initials = models.CharField(max_length=10) 
    surname = models.CharField(max_length=30) 
    university = models.CharField(max_length=100, verbose_name='University or organisation') 
    web_address = models.URLField(verbose_name='Author''s webpage URL') 
    email = models.EmailField(max_length=140, verbose_name='Author''s e-mail') 

    def __unicode__(self): 
     return u'%s %s' % (self.surname, self.initials) 

    class Meta: 
     ordering = ['surname'] 


class Article(models.Model): 
    IS_PRINTED = (("Y", "In print"), ("N", "Accepted for publication"),) 

    name = models.CharField(max_length=150, verbose_name="Article") 
    authors = models.ManyToManyField(Author, verbose_name="Authors", through='Authored') 
    journal = models.CharField(max_length=80, verbose_name="Journal") 
    status = models.CharField(choices=IS_PRINTED, max_length=1, verbose_name="Published or accepted for publication") 
    year = models.IntegerField() 
    volume = models.IntegerField(blank=True, null=True) 
    no = models.IntegerField(blank=True, null=True, verbose_name="No") 
    start_page = models.IntegerField(blank=True, null=True) 
    end_page = models.IntegerField(blank=True, null=True) 
    web_address = models.URLField(blank=True, verbose_name='Article webpage URL') 

    class Meta: 
     ordering = ['year'] 

    def __unicode__(self): 
     return self.name 


class Authored(models.Model): 
    AUTHOR_NO = ((1, "1"), (2, "2"), (3, "3"), (4, "4"), (5, "5"), (6, "6"), (7, "7"),) 

    author = models.ForeignKey(Author) 
    article = models.ForeignKey(Article) 
    author_ord = models.IntegerField(choices=AUTHOR_NO) 

    class Meta: 
     ordering = ['author_ord'] 

그리고이를 표시하기 위해

, 내가보기에 다음을 수행하십시오 : 여기
articles = Article.objects.all().reverse() 

return render(request, 'articles.html', {'recent_posts': post_names, 'plaintext': plaintext.text, 
              'articles': articles}) 

이 기사를 표시하기위한 템플릿 코드의 조각을이다 :

다음은 모델입니다
{% for article in articles %} 
    {% for author in article.authors.all %} 
     {{ author.surname }}, 
    {% endfor %} 
    {{ article.name }}. // {{ article.journal }}. — {{ article.year }}. 
    {% if article.volume %} 
     — Vol. {{ article.volume }}, 
    {% endif %} 
    {% if article.no %} 
     no. {{ article.no }} 
    {% endif %} 
    {% if article.start_page %} 
     p. {{ article.start_page }}-{% endif %} 
    {% if article.end_page %} 
     {{article.end_page }}. 
    {% endif %} 
    {% if article.web_address %} 
     <a href={{article.web_address}}>Link to article text</a> 
    {% endif %} <br /> 
{% endfor %} 

그러나 저자는 여전히 알파벳순으로 표시됩니다. 내 모델/뷰/템플릿에 항목을 추가하여 순서를 올바르게 적용 할 수 있습니까? 그렇지 않으면 목록 등의 도움을 받아야합니까?

답변

3

여기에 문제는 템플릿이 에 액세스하고 있습니다 (surname). 그것은 원하는 순서를 가지고 Authored 모델, 그래서 대신 시도 :

{% for authored in article.authored_set.all %} 
    {{ authored.author.surname }}, 
{% endfor %} 
+0

덕분에, 나는 완전히 템플릿에서 작동하는 방법 필드 '를 통해'실현하지 않은 것 같아요. –