_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)
.
这样的查询集更干净
假设我有一个用户和订单模型。 订单有一个 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 offilter
?
您可以使用 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)
.