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
what do you mean by back-end?
python, django, centos6 64bit server, mysql
all works fine also on website + admin but only that part if I click each table in admin which are defined in admin.py
class ProjectAdmin(admin.ModelAdmin):
list_display = ('client', 'category', 'subcategory', 'title', ) admin.site.register(Project, ProjectAdmin)
the more I add FK's to list display and you click that PROJECT table or others the view of it in admin is making that query and takes so long....if I make it just:
class ProjectAdmin(admin.ModelAdmin): list_display = ( 'title', ) admin.site.register(Project, ProjectAdmin)
NO FKs then it runs in 0.01msScreenshot:http://cl.ly/image/3w3D3g0h3h1A