It'd be nice to hear from Chris or Bruce on what the purpose of _get_subtype() is for, and why it's getting fired. I'm not running on the latest Satchmo, and I don't get this error with our current store.
I'd like to dig into it more to figure out what about the model inheritance method is being tripped up here. Since MyProduct is a subclass of Product, it seems to be trying to run _get_subtypes() from the Product class, and perhaps there is something funky happening there? As in, it's running _get_subtypes() but there aren't any subtypes for MyProduct? I'm just guessing here as it's a bit confusing to me why I can't duplicate this behavior. On Wed, Oct 28, 2009 at 3:31 PM, philosophe <[email protected]> wrote: > > I had this working previously, or rather I found a workaround for it > that now fails. > > I used the satchmo diaries example for creating a custom product > class, and my code starting throwing the _get_subtype() errors: > > http://groups.google.com/group/satchmo-users/browse_thread/thread/adfff4982affea9f/d063a7d5cd6e2ca7 > > my class looks like this: > #################### > class MyProduct(Product): > objects = ProductManager() > > field1 = models.CharField(_("Field #1"), max_length=100) > field2 = models.CharField(_("Field #2"), max_length=100) > > def __unicode__(self): > return self.name > > def _get_subtype(self): > print " _get_subtype" > return "MyProduct" > > class Meta: > verbose_name = _('This is my Special Product') > verbose_name_plural = _('These are my Special Products') > #################### > > 1. With the above class, I get a loop repeatedly calling _get_subtype) > _ until the server crashes > > 2. if I remove the _get_subtype() method, I get the error "Caught an > exception while rendering: 'MyProduct' object has no attribute > '_get_subtype'" > > 3. if i change the return value to "My Product", i get the error > 'Product' object has no attribute 'cozybit product' > (this was my previous workaround... I was able to create and access > products built from this class) > > > the error for #2 pointed to this code from the Product model: > def get_subtypes(self): > # If we've already computed it once, let's not do it again. > # This is a performance speedup. > if hasattr(self,"_sub_types"): > return self._sub_types > types = [] > try: > for key in config_value('PRODUCT', 'PRODUCT_TYPES'): > app, subtype = key.split("::") > try: > subclass = getattr(self, subtype.lower()) > gettype = getattr(subclass, '_get_subtype') > subtype = gettype() > if not subtype in types: > types.append(subtype) > except models.ObjectDoesNotExist: > pass > except SettingNotSet: > log.warn("Error getting subtypes, OK if in SyncDB") > > self._sub_types = tuple(types) > return self._sub_types > > The product class doesn't have a _get_subtype) method, but the other > product classes do. > > I've deleted the product and rebuilt the db and run syncdb each time I > get a failure with this. What should I be looking at? > > thanks, > --derek > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Satchmo 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/satchmo-users?hl=en -~----------~----~----~----~------~----~------~--~---
