# How to prefetch loosely related objects

**URL:** https://forum.codewithmosh.com/t/how-to-prefetch-loosely-related-objects/19317
**Category:** Django
**Created:** [April 2, 2023, 7:21pm UTC](https://forum.codewithmosh.com/t/how-to-prefetch-loosely-related-objects/19317 "2023-04-02T19:21:48Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![rsingleton](https://avatars.discourse-cdn.com/v4/letter/r/a183cd/32.png) [@rsingleton](https://forum.codewithmosh.com/u/rsingleton)
#### Post date: [April 2, 2023, 7:21pm UTC](https://forum.codewithmosh.com/t/how-to-prefetch-loosely-related-objects/19317/1 "2023-04-02T19:21:48Z")

</div>

I’m looking for a way to use the Django ORM to perform a complex query on loosely related objects where the search is for an object that is a type of other object.

What if the Cart in our Ultimate Django course is a type of Container and you want a queryset containing the Cart and all of its items. Using the models below, how do you get the desired result without generating thousands of queries?

Example:  
The query in following ViewSet with relating serializers get the desired result but produces thousands of queries:

class CartViewSet(ModelViewSet):  
http\_method\_names = [‘get’,]  
queryset = Cart.objects.prefetch\_related(‘owner\_\_user’).select\_related(‘container’).select\_related(‘owner’).all()

```
serializer_class = CartSerializer

```

class UserProfileSerializer(serializers.ModelSerializer):  
class Meta:  
model = UserProfile  
fields = [‘id’, ‘nickname’, ‘first\_name’, ‘last\_name’]

```
first_name = serializers.SerializerMethodField('get_first_name')
last_name = serializers.SerializerMethodField('get_last_name')

def get_first_name(self, profile: UserProfile):
    return profile.user.first_name

def get_last_name(self, profile: UserProfile):
    return profile.user.last_name

```

class ContainerItemProductSerializer(serializers.ModelSerializer):  
class Meta:  
model = Product  
fields = [‘id’, ‘name’, ‘description’, ‘price’]

class CartItemSerializer(serializers.ModelSerializer):  
class Meta:  
model = ContainerItem  
fields = [‘id’, ‘product’]

```
thought = ContainerItemProductSerializer()

```

class CartContainerSerializer(serializers.ModelSerializer):  
class Meta:  
model = Container  
fields = [  
‘id’,  
‘tag’,  
‘created\_at’,  
‘items’,  
]

```
items = CartContainerSerializer(many=True, read_only=True)

```

class CartSerializer(serializers.ModelSerializer):  
class Meta:  
model = Cart  
fields = [  
‘id’,  
‘owner’,  
‘container’,  
]

```
owner = CartOwnerSerializer()
container = CartContainerSerializer()

```

[MODELS]  
class Product(models.Model):  
name = models.CharField()  
description = models.TextField()  
price = models.DecimalField()

class Container(models.Model):  
tag = models.CharField()  
created\_at = models.DateTimeField()

class Cart(models.Model):  
owner = models.ForeignKey(UserProfile)  
container = models.OneToOneField(Container)

class ContainerItem(models.Model):  
container = models.ForeignKey(Container)  
item = models.ForeignKey(Product)  
quantity = PositiveSmallIntegerField()
