_set() 和 filter() 在 django 中使用外键有什么区别?

What's the difference between _set() and filter() using a Foreign Key in django?

假设我有一个用户和订单模型。 订单有一个 fk 用户。

做起来有什么区别

def getorders(request):
    user = request.user
    orders = user.order_set.all()

def getorders(request):
    user = request.user
    orders = Order.objects.filter(user=user)

两者都会return相同的结果,不是吗?

那么使用 _set 而不是 filter 有什么好处?

Both will return the same result, no ?

,两者会得到相同的查询结果

So what's the benefits to use _set instead of filter?

您可以使用 related_name=… [Django-doc] 为关系指定不同的名称,例如:

from django.conf import settings
from django.db import models

class Order(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        <strong>related_name='orders'</strong>
    )

在这种情况下,您可以通过以下方式访问订单:

user<strong>.orders</strong>.all()

这段代码可以读作“用户的所有订单”,这可能比编写 Order.objects.filter(user=user).

这样的查询集更干净