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 %}
Working with Filter Easily the most important method when working with Django models and the underlying QuerySets is the filter() method, which allows you to generate a QuerySet of objects that match a particular set of filtered parameters.
The filter() method is used to filter you search, and allows you to return only the rows that matches the search term.
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 the order_by()
is lost as part of django's lazy evaluation? Maybe try wrapping the filter().order_by()
line in a list()
to force evaluation there instead of it being put off till some later time?
bilder = list(Bild.objects.filter(album__id = album_id).order_by('slot'))
It is a shot in the dark, but quick enough to be worth a try.
You should try to order by slot__id.
Like this:
bilder = Bild.objects.filter(album__id = album_id).order_by('slot__id')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With