Jani Tiainen kirjoitti:
> model.py:
> 
> from django.db import models
> 
> class Order(models.Model):
>     name = models.CharField(max_length=64)
> 
>     def __unicode__(self):
>         return self.name
> 
> class Product(models.Model):
>     name  = models.CharField(max_length=64)
> 
>     def __unicode__(self):
>         return self.name
> 
> class SubProduct1(Product):
>     prop1 = models.FloatField()
> 
>     def __unicode__(self):
>         return self.name
> 
> class SubProduct2(Product):
>     prop2 = models.EmailField()
> 
>     def __unicode__(self):
>         return self.name
> 
> class OrderProduct(models.Model):
>     order = models.ForeignKey(Order)
>     product = models.ForeignKey(Product)
> 
>     amount = models.IntegerField()
> 
>     def __unicode__(self):
>         return u'%s - %s - %s' % (self.order.name, self.product.name, 
> self.amount)
> 
> 
> Now it's trivial play with sub products and add spesific subproducts to 
> orderproduct.
> 
> But, then, how to list all SubProducts that belongs to spesific order?
> 
> Specially thing stops at "Product", it doesn't know which one of those 
> two subproducts it actually is.
> 
> I did following quick hack to get around this problem (added this to 
> Product model):
> 
>     def _get_subproduct(self):
>         for attr in ['subproduct1', 'subproduct2', ]:
>             try:
>                 return getattr(self, attr)
>             except ObjectDoesNotExist:
>                 pass
> 
>     subproduct = property(_get_subproduct)
> 
> 
> This just don't feel optimal solution, specially it hits database for 
> every subitem tried.
> 
> Any better way to achieve same without hitting that much database?

Or rather I would like to make "product" proterty in OrderProduct to 
return correct subtype right away since I'm not really interested in 
Product model itself but spesific sub types.

Should I do something like:


class OrderProduct(models.Model):
     order = models.ForeignKey(Order)
     product_ = models.ForeignKey(Product)

     amount = models.IntegerField()

     def _get_product(self):
         return product_.subproduct

     product = property(_get_product)

-- 
Jani Tiainen

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to