order_by()不';t在Django视图中使用filter()
我的模型:order_by()不';t在Django视图中使用filter(),django,Django,我的模型: ... 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__(sel
...
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):
我的看法是:
def album_bild(request, album_id, bild_id):
album_id = int(album_id)
bilder = Bild.objects.filter(album__id = album_id).order_by('slot')
....
当我遍历模板中的“bilder”时,我可以看到filter()确实起作用,但对象仍然是按pk排序的,而不是按“slot”排序的
我对filter()和order_by()的使用有问题吗
编辑:我想我应该补充一点,在shell中一切都很好。那么,可能错误在模板中
{% 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 %}
{%用于bild中的bild%}
{{bild.slot}
{%endfor%}
{%i在清空%}
{%endfor%}
我已经做了很多.filter().order_by()
链,就像你在那里做的一样,我觉得没有什么不合适的。我从未尝试过在不进一步处理对象的情况下(通常在对象上进行迭代)将排序传递到模板中,因此我想知道作为django的惰性评估的一部分,order\u by()
是否丢失了?也许可以尝试将filter().order_by()
行包装在list()
中,以强制在那里进行计算,而不是推迟到以后某个时间
bilder = list(Bild.objects.filter(album__id = album_id).order_by('slot'))
这是在黑暗中拍摄的,但速度足够快,值得一试。您应该尝试按插槽id订购 像这样:
bilder = Bild.objects.filter(album__id = album_id).order_by('slot__id')
在您的视图中.py 你不需要使用
filter(album__id = album_id)
(带双下划线)
因为“Album”与许多领域无关
这里的“相册”只是一个外键
因此视图.py应该具有
def album_bild(request, album_id, bild_id):
album_id_local = int(album_id)
bilder = Bild.objects.filter(album_id=album_id_local).order_by('slot')
....
(带一个下划线)
参考django文档:如果您也在使用django Rest框架,我会在这里搜索原因。order_by()在应用于ModelView中的查询集时不起作用,而不管.filter()是否存在 如果您不需要定义自己的get_queryset,请不要!django过滤器库为我解决了这个问题,仅使用OrderFilter就将条件get_queryset函数替换为3行
您没有在您的视图中稍后的某个地方执行类似于bilder.order_______…)的操作,是吗?在将bilder发送到模板之前,您是否对bilder执行了任何操作?我现在正在项目中执行相同类型的筛选和order________________________。。。我将玩一段时间,并试图弄清楚这一点,我在后面的视图中所做的唯一一件涉及bilder的事情是:清空=范围(18-len(bilder)),谢谢你的建议!可惜不是这样。我认为不将所有数据提供给模板可以避免问题。在我的情况下,这可能是低效的。但我还是很好奇…哦,对不起。它真的起作用了!谢谢你!使用list()成功了!(虽然我还是不明白为什么…)