On May 7, 2009, at 10:36 AM, George Song wrote:

>
> On 5/7/2009 8:56 AM, Eric Chamberlain wrote:
>> Our view is taking too long to render, can anyone offer suggestions  
>> to
>> improve its speed?
>>
>> There are 5830 profiles.
>>
>> /Total query count:/ 23809
>> /Total duplicate query count:/ 493
>> /Total SQL execution time:/ 66.003
>> /Total Request execution time:/ 142.931
>>
>> class Profile(Model):
>>    id = UUIDField(primary_key=True)
>>    user = ForeignKey(User, verbose_name=_('user'), unique=True,  
>> null=True)
>>    partner = ForeignKey('Partner')
>>    call_records = ManyToManyField('CallRecord', verbose_name=_('call
>> record'), null=True, blank=True, help_text='Calls made by the user')
>>
>> class Partner(Model):
>>    id = UUIDField(primary_key=True)
>>    name = CharField(max_length=255, help_text='The name for the  
>> partner')
>>    users = ManyToManyField(User, related_name='partner_users',
>> null=True, blank=True, help_text='Users signed up specifically  
>> through
>> this partner')
>>    providers = ManyToManyField('Provider',
>> related_name='provider_partners', blank=True, null=True,
>> help_text="Calling services owned by this provider.")
>>    calls = ManyToManyField('CallRecord',  
>> related_name='call_partners',
>> blank=True, null=True, help_text='Calls made through this calling  
>> service.')
>>
>> class CallRecord(Model):
>>    id = UUIDField(primary_key=True)
>>    provider_account = ForeignKey('ProviderAccount', null=True,
>> blank=True, help_text='The calling service, if any, the call was made
>> through')
>>    provider = ForeignKey('Provider', blank=True, null=True,
>> help_text='The calling service the call was made through')
>>
>> class Provider(Model):
>>    id = UUIDField(primary_key=True)
>>    name = CharField(max_length=255)
>>
>> class ProviderAccount(Model):
>>    provider = ForeignKey('Provider', help_text='The calling service
>> this account works with')
>>    username = TextField()
>>    encrypted_password = TextField(db_column='password')
>>    user = ForeignKey(User, help_text='The user this calling service
>> account belongs to')
>>
>>
>> profiles =
>> Profile 
>> .objects 
>> .filter(partner=request.partner,user__is_active=True).order_by('- 
>> user__date_joined')
>> for p in profiles:
>>      p.provider_list = list(
>>          account.provider for account in
>> ProviderAccount 
>> .objects 
>> .filter(user=p.user,provider__provider_partners=request.partner))
>>      p.call_count = p.call_records.filter().count()
>> return PartnerResponse(request, {'profiles': profiles})
>>
>> PartnerResponse returns the view to the user, the template uses a for
>> loop to iterate through the profiles.
>
> Well, it seems like what you're really after is the ProviderAccount,  
> right?
>
> So you can just pass this to your template:
> {{{
> accounts =
> ProviderAccount 
> .objects 
> .filter(provider__provider_partners=request.partner).order_by('- 
> user__date_joined')
> }}}
>
> In your template you can regroup accounts by user and you should be  
> good
> to go, right?
>

We are after user information and a user can have 0 or more  
ProviderAccounts.

The template looks like:

{% for profile in profiles %}
     <tr>
         <td><a href="{% url partner-edit-user user_id=profile.id  
%}">{{profile.user.email}}</a></td>
         <td>{{profile.user.first_name}} {{profile.user.last_name}}</td>
         <td>{{profile.user.date_joined|date:"Y M d H:i"  }}</td>
         <td>
             {% for calling_service in profile.provider_list %}
             <a href="{% url partner-calling-service-edit  
calling_service_id=calling_service.id %}">{{calling_service.name}}</ 
a>{% if not forloop.last %}<br />{% endif %}
             {% endfor %}
         </td>
         <td>
             {% for sim in profile.sims.all %}
             {{sim.caller_id}}{% if not forloop.last %}<br />{% endif %}
             {% endfor %}
         </td>
         <td>{{profile.call_count}}</td>
         <td><a href="{% url partner-delete-user user_id=profile.id  
%}"><img src="{{ MEDIA_URL }}/images/delete.png" alt="Delete user  
account" title="Delete user account"/></a></td>
     </tr>
{% endfor %}





--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to