@Yshmeel
что-то делаю, но не делаю

Что делать если возвращается пустота в M2M поле при использовании prefetch_related?

Использую Django для API своего проекта, и использую Djongo для соединения Django с MongoDB. В итоге, из-за проблемы n+1 запросов мне пришлось использовать prefetch_related. Но, когда я выполняю эту функцию в QuerySet, то M2M поля которые я префетчу становятся пустыми.

Тестовый запрос DRF:
DRF Test query  

@api_view(['GET'])
@permission_classes([AllowAny])
def test_prefetch(request):
    users = User.objects.prefetch_related('roles').filter(id=4) # id=4 - аккаунт с ролями
    print(users[0].roles.all())  # возвращает []
    print(users[0]._prefetched_objects_cache) # возвращает {"roles": []}
    return Response(123, status=200)

Models

class UserRoles(models.Model):     
    user = models.ForeignKey(to="User", on_delete=models.DO_NOTHING, default=None)    
    role_type = models.CharField(default="", max_length=256)    
    given_at = models.DateTimeField(default=api.functions.get_local_time)     
    expires_at = models.DateTimeField(default=api.functions.get_local_time, null=True) 
    def __str__(self): 
        return self.role_type  

class User(AbstractBaseUser, PermissionsMixin): 
    ....      
    roles = models.ManyToManyField(UserRoles, symmetrical=True)
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы