You're almost right. I want that - for each item_code - the sum aggregated by 
item_code of the items inserted into OrderDetail be automatically inserted into 
total_quantity_in_store by the same code in Items model.
Ciao
Vittorio
Il giorno 08/nov/2013, alle ore 16:13, Vincenzo Prignano ha scritto:

>  I got that you are executing a raw sql query every time you insert a new 
> OrderDetail record. But can I ask why are you doing this? 
> I think you should really need to redesign your models..
> 
> On Thursday, November 7, 2013 10:04:33 AM UTC+1, vittorio wrote:
> I made an effort to simplify my app and translate it into English. 
> Here it is 
> ================= 
> models.py 
> ................................. 
> class Items(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=categoria, 
> db_column='Category',default=2) 
>     
> total_quantity_in_store=models.IntegerField(db_column='total_quantity_in_store',
>  default=0) 
>     def __unicode__(self): 
>         return self.description 
>     class Meta: 
>         db_table = u'Items' 
>   
> class Order(models.Model): 
>     id_order = models.IntegerField(primary_key=True,db_column='id_order') 
>     patient = models.ForeignKey(Patients, db_column='patient') 
>     def __unicode__(self): 
>         return u"Ord.%s per %s" % (self.id_order, self.paziente) 
>     class Meta: 
>         db_table = u'Order' 
> 
> post_save.connect(TotalInStore, sender=Order) 
> 
> class OrderDetail(models.Model): 
>    id_order = models.ForeignKey(Order,db_column='id_order') 
>    item_code = models.ForeignKey(Items,verbose_name='Items') 
>    quantity = models.IntegerField(db_column='quantity',blank=True,default=0) 
>     class Meta: 
>         db_table = u'OrderDetail' 
> ================== 
> admin.py 
> ...................... 
> class OrderDetailInline(admin.TabularInline): 
>     model=OrderDetail 
>     raw_id_fields = ['item_code',] 
>     fields=('item_code', 'quantity',) 
> 
> class OrderOption(admin.ModelAdmin): 
>     readonly_fields = ['order_id', 'patient'] 
>     list_display = ( 'patient','order_id') 
>     fields=( 'order_id', 'patient') 
>     inlines=[OrderDetailInline,] 
> 
> admin.site.register(Order,OrderOption) 
> .................... 
> ========================= 
> signals.py 
> def ExecuteQuery(query): 
>     from django.db import connection 
>     cursor=None 
>     cursor= connection.cursor() 
>     cursor.execute(query, []) 
>     return cursor.fetchall() 
> 
> def TotalInStore(sender,**kwargs): 
>     .................... 
>     ItemsInOrder = """SELECT item_code_id as code,SUM(quantity) as total 
>         FROM OrderDetail 
>         GROUP BY item_code_id 
>         ORDER BY item_code_id""" 
>     SUMS = ExecuteQuery(ItemsInOrder) 
>     if SUMS: 
>        
> [Items.objects.filter(pk=t[0]).update(total_quantity_in_store=int(t[1])) for 
> t in SUMS] 
> ............. 
> return 
> 
> To put it in a nutshell my Django 1.5.5 app 1):records the quantities of 
> medical items given to patients of a medical center by means of  an inline 
> view that connects 'OrderDetail' to 'Order', 2):  then input in the field 
> total_quantity_in_store of the model 'Items' the sum of the field quantity 
> ('OrderDetail') aggregated by item code via a post_save signal calling the 
> TotalInStore function. 
> It works happily BUT .... unfortunately with the increasing numbers of record 
> in 'OrderDetail' it is (and will be obviously) becoming slower and slower.  
> This is due to the fact that the post_save signal - aggregating the 
> quantities - by code is called for EACH OrderDetail record I have input in 
> the inline view while it will be more logical to execute it ***after*** all 
> records of the inline view have been saved. 
>   
> Please help me modify my app so that the TotalInStore function is called only 
> once after the inline view Order-OrderDetail has been saved. 
> 
> Ciao 
> Vittorio 
> 
> 
> -- 
> 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 http://groups.google.com/group/django-users.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/django-users/c1081e20-375a-4626-9b72-6582caad3a97%40googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.

-- 
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 http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/DAE972AB-EF9B-4F88-AA0E-1CC0A2FB08D2%40gmail.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to