В чем разница между _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).

Вернуться на верх