My model:
...
class Bild(models.Model):
album = models.ForeignKey(Album)
slot = models.IntegerField()
bild = models.ImageField(upload_to='bilder', null=True)
untertitel = models.CharField(max_length=200, null=True)
def __unicode__(self):
My view:
def album_bild(request, album_id, bild_id):
album_id = int(album_id)
bilder = Bild.objects.filter(album__id = album_id).order_by('slot')
....
When I iterate through “bilder” in the template, I can see that the filter() did work but the objects are still ordered by the pk instead of the “slot”.
Is there a problem with my usage of filter() and order_by()?
EDIT: I guess i should add that everything works fine in the shell. So maybe the error is in the template…?
{% for bild in bilder %}
<li
{% ifequal bild.slot bild_id %}
class="active"
{% endifequal %}
onclick="window.location.href='/portfolio/{{ album_id }}/{{ bild.slot }}'"><div>{{ bild.slot }}</div></li>
{% endfor %}
{% for i in empties %}
<li class="empty"></li>
{% endfor %}
I’ve done lots of
.filter().order_by()chains just as you have them there, and nothing jumps out to me as out of place. I’ve never tried to carry that ordering over to the template without further processing the objects though (usually iterate over them), so I wonder if theorder_by()is lost as part of django’s lazy evaluation? Maybe try wrapping thefilter().order_by()line in alist()to force evaluation there instead of it being put off till some later time?It is a shot in the dark, but quick enough to be worth a try.