我有以下model.py.
from django.db import models
class Address(models.Model):
addr = models.CharField(max_length=150)
def __unicode__(self):
return u'%s' % (self.addr)
class Anniversary(models.Model):
date = models.DateField()
def __unicode__(self):
return u'%s' % (self.date)
class Person(models.Model):
name = models.CharField(max_length=50)
birthday = models.DateField()
anniversary = models.ForeignKey(Anniversary)
address = models.ForeignKey(Address)
def __unicode__(self):
return u'%s %s %s %s' % (self.name, self.birthday, self.anniversary, self.address)
Run Code Online (Sandbox Code Playgroud)
我想将所有条目的内容打印到我的模板中.但按出生日期与当前日期排序.即最近的第一个然后是名字.做这个的最好方式是什么.我应该先将它排序然后将其附加到列表或字典中吗?
任何指针都会很棒.
谢谢,
Hed*_*ide 12
您可以在模型的元类中添加默认排序,例如
class Person(models.Model):
# fields
class Meta:
ordering = ('anniversary__date',)
Run Code Online (Sandbox Code Playgroud)
然后在你的模板中,它就像:
<ul>
{% for person in persons %}
<li>{{ person.anniversary.date|date:"M d, Y" }} - {{ person.name }}</li>
{% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)
如果您需要在视图中进行自定义排序(根据请求对象过滤掉人员):
def myview(request):
context = dict(
persons = Person.objects.exclude(person.id=request.user.id)\
.order_by('anniversary__date')
)
return render_to_response('app/template.html', context)
Run Code Online (Sandbox Code Playgroud)
Nb在order_by参数之前添加减号会order_by('-attr')反转排序.
正如@DanielEriksson所提到的,如果你的情况不是假设,那么你似乎应该简化一些事情.
| 归档时间: |
|
| 查看次数: |
1862 次 |
| 最近记录: |