Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
order_by()不';t在Django视图中使用filter()_Django - Fatal编程技术网

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()成功了!(虽然我还是不明白为什么…)