В чем разница между _set() и filter() при использовании внешнего ключа в django?
Допустим, у меня есть модель User и Order. У заказа есть fk User.
Какая разница между "делать
def getorders(request):
user = request.user
orders = user.order_set.all()
и
def getorders(request):
user = request.user
orders = Order.objects.filter(user=user)
Оба вернут один и тот же результат, нет
Итак, какие преимущества дает использование _set вместо filter?
Оба вернут один и тот же результат, нет
Да, в результате получится один и тот же запрос.
Так в чем же преимущества использования
_set
вместо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,
related_name='orders'
)
В этом случае вы получаете доступ к ордерам с помощью:
user.orders.all()
этот код можно прочитать как "все заказы пользователя", что, вероятно, более чисто, чем написание queryset типа Order.objects.filter(user=user)
.