I'm not an expert on this matter, but I did read about list_select
related recently:

/path/django-docs-1.4-en/ref/contrib/admin/index.html#django.contrib.admin.ModelAdmin.list_select_related

which links to select related:

django-docs-1.4-en/ref/models/querysets.html#django.db.models.query.QuerySet.select_related

which talks about using the depth keyword to minimise the level the db goes to:

"Usually, using select_related() can vastly improve performance
because your app can avoid many database calls. However, in situations
with deeply nested sets of relationships select_related() can
sometimes end up following "too many" relations, and can generate
queries so large that they end up being slow.

In these situations, you can use the depth argument to
select_related() to control how many "levels" of relations
select_related() will actually follow"

Hope this helps!

cheers
L.


On Tue, Sep 25, 2012 at 11:29 AM, rentgeeen <rentge...@gmail.com> wrote:
> Also just found out when I remove Foreign Keys from admin.py from
> "list_display", it works blazing fast:
>
>
> class ClientAdmin(admin.ModelAdmin):
>
>    list_display = ('title',)
>
> admin.site.register(Client, ClientAdmin)
> class CategoryAdmin(admin.ModelAdmin):
>
>    list_display = ('client', 'title',)
>
> admin.site.register(Category, CategoryAdmin)
> class SubcategoryAdmin(admin.ModelAdmin):
>
>    list_display = ('client', 'category', 'title', )
>
> admin.site.register(Subcategory, SubcategoryAdmin)
> class ProjectAdmin(admin.ModelAdmin):
>
>    list_display = ('client', 'category', 'subcategory', 'title', )
>
> admin.site.register(Project, ProjectAdmin)
> class TypeAdmin(admin.ModelAdmin):
>
>    list_display = ('client', 'title', )
>
> admin.site.register(Type, TypeAdmin)
> class PageAdmin(admin.ModelAdmin):
>   list_display = ('client', )
>
> admin.site.register(Page, PageAdmin)
>
> FOREIGN KEYS cannot be in list_display? How to optimize them?
>
> On Monday, 24 September 2012 19:17:45 UTC-4, rentgeeen wrote:
>>
>> Have a SQL problem, adding this model all works correctly, the problem is
>> in ADMIN.
>>
>> When I add the data just few to each table, by clicking on TYPE & PAGE in
>> ADMIN the page is loading so slow, installed debug_toolbar and SQL took 17
>> seconds for the TYPE. When I tried the PAGE it gave me timeout, my question
>> is what is wrong with my model? Is it constructed bad?
>>
>> My goal is this lets say example:
>>
>> www.example.com/audi/4doors/s4/sport/red/audi-url
>>
>> basically all 6 urls are dynamic that I would specify in the each table
>> and would be in the PAGE as dropdowns also in others. What is the optimal
>> way to do that or optimize the model?
>>
>> Here is a screenshot of TYPE page loading:
>>
>> screenshot: http://cl.ly/image/2931040E0t35
>>
>> Records:
>>
>> auto_client = 3 rows
>>
>> auto_category = 2 rows
>>
>> auto_subcategory = 2 rows
>>
>> auto_project = 5 rows
>>
>> auto_type = 2 rows
>>
>> auto_page = 0 - because cliking on auto_page it times out because of SQL
>> query. Basically togehter like 14 records thats nothing :)
>>
>> here is also mysql query in PHPmyadmin: cl.ly/image/2S320h3d0P0J 17
>> seconds
>>
>> Please help thanks
>>
>>
>> from django.db import models
>>
>>
>> class Client(models.Model):
>>     title = models.CharField(max_length=100, unique=True)
>>     def __unicode__(self):
>>         return self.title
>>
>> class Category(models.Model):
>>     client = models.ForeignKey(Client, to_field='title')
>>     title = models.CharField(max_length=200, unique=True)
>>     def __unicode__(self):
>>         return self.title
>>
>> class Subcategory(models.Model):
>>     client = models.ForeignKey(Client, to_field='title')
>>     category = models.ForeignKey(Category, to_field='title')
>>     title = models.CharField(max_length=200, unique=True)
>>     def __unicode__(self):
>>         return self.title
>>
>> class Project(models.Model):
>>     client = models.ForeignKey(Client, to_field='title')
>>     category = models.ForeignKey(Category, to_field='title')
>>     subcategory = models.ForeignKey(Subcategory, to_field='title')
>>     title = models.CharField(max_length=200, unique=True)
>>     def __unicode__(self):
>>         return self.title
>>
>> class Type(models.Model):
>>     client = models.ForeignKey(Client, to_field='title')
>>     category = models.ForeignKey(Category, to_field='title')
>>     subcategory = models.ForeignKey(Subcategory, to_field='title')
>>     project = models.ForeignKey(Project, to_field='title')
>>     title = models.CharField(max_length=200, unique=True)
>>     def __unicode__(self):
>>         return self.title
>>
>> class Page(models.Model):
>>     client = models.ForeignKey(Client, to_field='title')
>>     category = models.ForeignKey(Category, to_field='title')
>>     subcategory = models.ForeignKey(Subcategory, to_field='title')
>>     project = models.ForeignKey(Project, to_field='title')
>>     type = models.ForeignKey(Type, to_field='title')
>>     pageurl = models.CharField(max_length=200)
>>
>> By cliking on TYPE this is the SQL output that takes 17 secs, cant click
>> on last PAGE because thats so long - timed out:
>>
>> SELECT `auto_type`.`id`, `auto_type`.`client_id`,
>> `auto_type`.`category_id`, `auto_type`.`subcategory_id`,
>> `auto_type`.`project_id`, `auto_type`.`title`, `auto_client`.`id`,
>> `auto_client`.`title`, `auto_category`.`id`, `auto_category`.`client_id`,
>> `auto_category`.`title`, T4.`id`, T4.`title`, `auto_subcategory`.`id`,
>> `auto_subcategory`.`client_id`, `auto_subcategory`.`category_id`,
>> `auto_subcategory`.`title`, T6.`id`, T6.`title`, T7.`id`, T7.`client_id`,
>> T7.`title`, T8.`id`, T8.`title`, `auto_project`.`id`,
>> `auto_project`.`client_id`, `auto_project`.`category_id`,
>> `auto_project`.`subcategory_id`, `auto_project`.`title`, T10.`id`,
>> T10.`title`, T11.`id`, T11.`client_id`, T11.`title`, T12.`id`,
>> T12.`title`, T13.`id`, T13.`client_id`, T13.`category_id`, T13.`title`,
>> T14.`id`, T14.`title`, T15.`id`, T15.`client_id`, T15.`title`, T16.`id`,
>> T16.`title` FROM `auto_type` INNER JOIN `auto_client` ON
>> (`auto_type`.`client_id` = `auto_client`.`title`) INNER JOIN
>> `auto_category` ON (`auto_type`.`category_id` = `auto_category`.`title`)
>> INNER JOIN `auto_client` T4 ON (`auto_category`.`client_id` = T4.`title`)
>> INNER JOIN `auto_subcategory` ON (`auto_type`.`subcategory_id` =
>> `auto_subcategory`.`title`) INNER JOIN `auto_client` T6 ON
>> (`auto_subcategory`.`client_id` = T6.`title`) INNER JOIN `auto_category`
>> T7 ON (`auto_subcategory`.`category_id` = T7.`title`) INNER JOIN
>> `auto_client` T8 ON (T7.`client_id` = T8.`title`) INNER JOIN
>> `auto_project` ON (`auto_type`.`project_id` = `auto_project`.`title`)
>> INNER JOIN `auto_client` T10 ON (`auto_project`.`client_id` = T10.`title`)
>> INNER JOIN `auto_category` T11 ON (`auto_project`.`category_id` =
>> T11.`title`) INNER JOIN `auto_client` T12 ON (T11.`client_id` =
>> T12.`title`) INNER JOIN `auto_subcategory` T13 ON
>> (`auto_project`.`subcategory_id` = T13.`title`) INNER JOIN `auto_client`
>> T14 ON (T13.`client_id` = T14.`title`) INNER JOIN `auto_category` T15 ON
>> (T13.`category_id` = T15.`title`) INNER JOIN `auto_client` T16 ON
>> (T15.`client_id` = T16.`title`) ORDER BY `auto_type`.`id` DESC
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/django-users/-/TUuWsU8jlKgJ.
>
> 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.



-- 
...we look at the present day through a rear-view mirror. This is
something Marshall McLuhan said back in the Sixties, when the world
was in the grip of authentic-seeming future narratives. He said, “We
look at the present through a rear-view mirror. We march backwards
into the future.”

http://www.warrenellis.com/?p=14314

-- 
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