Under Django 1.9.5 and admin I'm developping an application "myapp" of which 
below you can see a simplified complete version.
 
Focusing on the  OrderOption ModelAdmin its inline  OrderDetailinline has a 
raw_id_field  related to the model Item. Now, when I click on the magnifying 
lens close to the raw_id_field a popup window - as expected- is fired which 
allows the user to choose an item from the Item model list.

Now, in the real application  the  popup window is somewhat of a bottleneck 
because it  requires about 4-6 sec. to be loaded owing to the fact that there 
are many records in the Item model. 
Luckily the Item model records change very slowly over time. In a week, say, no 
more than five  items are either added or modified or seldom deleted.
What I'd like to do is using the memcache backend  to save the queryset of the 
Item model - which will appear in the popup window - on my memcached server and 
recall this same queryset each time the popup window of the raw_id_field is 
fired avoiding the execution of the query.

My problem is that I don't know how to do it. Please help!

By the way, using the debug_toolbar I see that the popup window uses the view 
function django.contrib.admin.options.changelist_view, no arguments, and the 
corresponding  url name is myapp_item_changelist.
The sql query is obviously
SELECT "Items"."code", "Items"."Description", "Items"."Category" FROM "Items" 
ORDER BY"Items"."code" DESC

Thanks
Vittorio


==============================

models.py
from django.db import models

# Create your models here.
class Item(models.Model):
   code = models.CharField(primary_key=True,max_length=15,db_column='code')
   description = models.CharField(max_length=255, db_column='Description', 
db_index=True)
   category = models.IntegerField(choices=[(1,"Cat_1"),(2,"Cat_2")], 
db_column='Category',default=1)
   def __unicode__(self):
       return self.description
   class Meta:
       db_table = u'Items'

class Patient(models.Model):
   name = models.CharField(max_length=255, db_column='Description', 
db_index=True)
   def __unicode__(self):
       return self.name
   class Meta:
       db_table = u'Patients'

class Order(models.Model):
   patient = models.ForeignKey(Patient, db_column='patient')
   def __unicode__(self):
       return u"Ord.%s per %s" % (self.id_order, self.patient)
   class Meta:
       db_table = u'Order'

class OrderDetail(models.Model):
  id_order = models.ForeignKey(Order,db_column='id_order')
  item_code = models.ForeignKey(Item,verbose_name='Items')
  quantity = models.IntegerField(db_column='quantity',blank=True,default=0)
  class Meta:
       db_table = u'OrderDetail'
==============================

My admin.py
from django.contrib import admin
from myapp.models import *
# Register your models here.

class PatientOption(admin.ModelAdmin):
   list_display = ( 'name',)
   fields=( 'name',)

class ItemOption(admin.ModelAdmin):
   list_display = ( 'code','description')
   fields=('code','description')

class OrderDetailInline(admin.TabularInline):
   model=OrderDetail
   raw_id_fields = ['item_code',]
   fields=('item_code', 'quantity',)

class OrderOption(admin.ModelAdmin):
   readonly_fields = ['patient']
   list_display = ( 'patient',)
   fields=( 'patient',)
   inlines=[OrderDetailInline,]

admin.site.register(Patient,PatientOption)
admin.site.register(Item,ItemOption)
admin.site.register(Order,OrderOption)


-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/270EE134-AFDA-4E43-B59F-8CE8341EF323%40gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to