【问题标题】:Chaining multiple filter() in Django returning nothing在 Django 中链接多个 filter() 什么都不返回
【发布时间】:2021-06-11 21:11:50
【问题描述】:

我试图过滤两个条件,但没有返回任何内容 这就是我正在使用的条件的功能

def airport_view(request, code):
    airport = Airport.objects.get(code=code)
    flights = Flight.objects.filter(origin=airport).filter(destination=airport)
    context = {
        'airport':airport,
        'flights':flights
    }
    return render(request, "flights/airport.html", context)

机场正常工作,但多重过滤链不起作用,即使我有三个航班同时满足这两种情况之一 如果对你有帮助,那就是相关模型

class Airport(models.Model):
    code = models.CharField(max_length=64)
    name = models.CharField(max_length=64)

class Flight(models.Model):
    origin = models.ForeignKey('Airport', on_delete=models.CASCADE, related_name="From")
    destination = models.ForeignKey('Airport', on_delete=models.CASCADE,related_name="To")
    passengers = models.ManyToManyField('Person', blank=True)

【问题讨论】:

  • 您在此查找往返同一Airport的航班?
  • 是的,我想显示往返特定机场的所有航班。

标签: python django django-models filter


【解决方案1】:

对于条件的析取,您可以使用Q 对象:

from django.db.models import Q

flights = Flight.objects.filter(Q(origin=airport) | Q(destination=airport))

这将检索具有 origindestination 给定airportFlights。

如果将过滤器链接在一起,则定义了一个连接,因此在这种情况下,您正在寻找Flights,它的来源作为目标@ 987654328@.


注意:通常最好使用get_object_or_404(…) [Django-doc], 然后直接使用.get(…) [Django-doc]。如果对象不存在, 例如,由于用户自己更改了 URL,get_object_or_404(…) 将导致返回 HTTP 404 Not Found 响应,而使用 .get(…) 将导致 HTTP 500 服务器错误

【讨论】:

    猜你喜欢
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2012-06-18
    • 2018-09-10
    • 2017-02-14
    相关资源
    最近更新 更多