On Thu, Apr 8, 2010 at 1:04 PM, Phui Hock <[email protected]> wrote:
> Given the following block of code:
> --- models.py ---
> from django.db import models
> from django.db.models.signals import post_save
>
> class Animal(models.Model):
> category = models.CharField(max_length=20)
>
> class Dog(Animal):
> color = models.CharField(max_length=10)
>
> def echo_category(sender, **kwargs):
> print "category: '%s'" % sender.category
>
> post_save.connect(echo_category, sender=Dog)
>
>
> and the following fixture:
> --- initial_data.json ---
> [
> {
> "pk": 1,
> "model": "animal.animal",
> "fields": {
> "category": "omnivore"
> }
> },
> {
> "pk": 1,
> "model": "animal.dog",
> "fields": {
> "color": "brown"
> }
> }
> ]
>
> Executing manage.py syncdb throws "AttributeError: type object 'Dog'
> has no attribute 'category'" from inside of echo_category callback.
> This is weird because I can access category from the Dog instance if
> it is an instance from a query, say Dog.objects.get(pk=1).
>
> How come the Dog instance received by echo_category is different
> compared to the Dog instance from a query? Can't I do post_save on a
> sub-model?
>
Please note that sender != instance. The Dog type object (=class) does
not have a category instance itself; a Dog instance however does have
one, since it is inherited from Animal.
You should change your signal handler to something like this:
def echo_category(sender, instance, **kwargs):
print u"category: %s" % instance.category
--
FeinCMS Django CMS building toolkit: http://spinlock.ch/pub/feincms/
--
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.