我有一个模型,其中有2个相同模型的外键:
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])
我需要获得:
答案 0 :(得分:0)
在这种简单情况下,没有理由使用原始查询。
Note.objects.filter(sender__is_staff = True, action__in = action)
如果您确实要优化以预取发送者/接收者,则可以使用select_related('sender', 'receiver')
。