我收到这个错误
渲染时捕获AssertionError:一旦切片被捕获,就无法过滤查询.
在这条线上
{% if form.non_field_errors %}
Run Code Online (Sandbox Code Playgroud)
当我尝试这样做
copy_pickup_address = ModelChoiceField(required=False, queryset=Address.objects.filter(shipment_pickup__user=user).order_by('-shipment_pickup__created')[:5])
Run Code Online (Sandbox Code Playgroud)
但我需要切片,因为我只想要最后5个地址.它呈现正常,直到我选择一个地址并提交表格.为什么不喜欢这个?我怎么能绕过它呢?
mhs*_*ith 12
没有人回答"为什么不喜欢这个?" 你问题的一部分.解释见https://docs.djangoproject.com/en/1.8/ref/models/querysets/:
即使切片未评估的QuerySet返回另一个未评估的QuerySet,也不允许进一步修改它(例如,添加更多过滤器或修改排序),因为这不能很好地转换为SQL,也不会有明确的含义.
我不知道如何解决您的问题(似乎您已经解决了)但我认为这就是您收到错误的原因:https : //docs.djangoproject.com/en/1.4/ref/models/querysets/
“切片。如限制 QuerySets 中所述,可以使用 Python 的数组切片语法对 QuerySet 进行切片。切片未评估的 QuerySet 通常会返回另一个未评估的 QuerySet,但如果使用切片语法的“step”参数,Django 将执行数据库查询, 并将返回一个列表。对已评估(部分或全部)的 QuerySet 进行切片也会返回一个列表。”
我猜您是在强制使用切片对查询集进行评估,以便进一步过滤会导致错误?
这最终对我有用
_latest_shipment_ids = [address.id for address in Address.objects.filter(shipment_pickup__user=user).order_by('-shipment_pickup__created')[:5]]
copy_pickup_address = ModelChoiceField(
required=False,
queryset=Address.objects.filter(
shipment_pickup__user=user,
id__in=_latest_shipment_ids
)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15482 次 |
| 最近记录: |