I need to get a list of all users for a given provider. A user may have multiple providers, and a provider may have multiple users. Here is what I have so far:
I have the following tables:
class Provider(models.Model):
provider = models.CharField(max_length=100, primary_key=True)
class UserProfile(models.Model):
user = models.ForeignKey(User, primary_key=True)
provider = models.ManyToManyField(Provider, db_column='provider')
In my view:
providers = Provider.objects.order_by('provider')
And in my template:
{% for provider in providers %}
<tr>
<td class="provider">
{{ provider.provider }}
</td>
<td class="email">
{% for profile in provider.userprofile_set.all %}
{{ profile.user }}
{% endfor %}
</td>
</tr>
{% endfor %}
This produces about 250 queries, as I’m iterating over the Provider QuerySet in the template. How would I improve the above — is there a way to use prefetch_related or select_related here?
Use
prefetch_related();selectdoesn’t work on_related()
ManyToManyFields:From the docs: