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 [email protected].
To post to this group, send email to [email protected].
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