Пользовательский набор запросов с двумя ForeignKeys для одного объекта - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть модель, которая имеет 2 ForeignKeys для той же модели:

    class Note(models.Model):
        sender = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='sender_note', on_delete=models.CASCADE)
        receiver = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
                                      related_name='reciever_note', on_delete=models.CASCADE)
  status = models.BooleanField(blank=True, null=True)
 action = models.CharField(choices=NOTE_CHOICES, max_length=5, blank=True, null=True)

Бывают ситуации, когда получатель и отправитель - это один и тот же пользователь, но в большинстве случаев это разные пользователи.

Я создал пользовательский набор запросов, где я использую RawQueryset:

   qs_str = 'SELECT N.id, N.status,N.action, U.email AS email FROM notes_note AS N LEFT JOIN users_user AS U on N.sender_id=U.id WHERE action IN %s AND status IS NOT TRUE AND U.is_staff=%s'

     qs = Note.objects.raw(qs_str, [action, user_is_staff])

Мне нужно получить:

  1. и получатель, и отправитель (чтобы получить от них атрибуты, особенно электронную почту)
  2. проверить, является ли отправитель персоналом или нет

1 Ответ

0 голосов
/ 04 сентября 2018

Нет причин использовать необработанный запрос для такого простого случая ..

Note.objects.filter(sender__is_staff = True, action__in = action)

если вы действительно хотите оптимизировать предварительную выборку отправителя / получателя, вы можете использовать select_related('sender', 'receiver').

...