Как соединить две модели в один queryset на Django

У мне есть две модели Item и UserRating. Обе модели связаны только с user по ForeignKey. Мне нужно получать Item в котором есть user_id из UserRating c таким же id.

Это моя модель Item

class Item(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    name = models.CharField(max_length=255, null=True, blank=True)

А это модель UserRating

class UserRating(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    rate = models.DecimalField(max_digits=6, decimal_places=1)

Ответы (1 шт):

Автор решения: Семен Банщиков

Так как в приведенных моделях не указаны related_name поля, то django генерит автоматом поля для связи "имямодели_set" В вашем случае запрос будет выглядеть следующим образом:

#Item queryset.
queryset = Item.objects.filter(
    user__isnull=False,
    user__userrating__isnull=False
).select_related(
    'user'
).prefetch_related(
    'user__userrating_set'
).all()

#Item instance
instance = queryset[0]

#User instance
instance.user

#UserRating queryset
instance.user.userrating_set.all()

#UserRating instance
instance.user.userrating_set.all()[0]
→ Ссылка