I did the following, it works fine:

from django.db import models

class Place(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=80)

    def __unicode__(self):
        return self.name

# you can call this on any model object
def object_as_dict(model_object):
    return
model_object.__class__.objects.filter(pk=model_object.pk).values()[0]

# If you would like to add this ability to your model objects
# you could define this as a method in Place,
# but let's assume that you don't have access to Place
Place.as_dict = object_as_dict

class Restaurant(Place):
    serves_hot_dogs = models.BooleanField()
    serves_pizza = models.BooleanField()

class Bar(Place):
    has_happy_hour = models.BooleanField()
    checks_id = models.BooleanField()

# now you can do like the following:
# >>> from mysite.eatery.models import Place, Restaurant, Bar,
object_as_dict
# >>> p = Place(name="Lee's Tavern", address="Staten Island")
# >>> p.save() # now we have a pre-existing record, IRL you would
fetch it
# >>> r = Restaurant(serves_pizza=True, serves_hot_dogs=False,
**p.as_dict())
# >>> r.save()


On Apr 30, 1:48 pm, medhat <[EMAIL PROTECTED]> wrote:
> Trying to use this idea, I created the following function:
>
> def extend(parent_class, parent_id, child_class, **kwargs):
>     p = parent_class.objects.filter(pk=parent_id).values()[0]
>     p.update(kwargs)
>     c = child_class(**p)
>     return c
>
> but that still does not work. It throws an "AttributeError: can't set
> attribute" from line 224 in django\db\models\base.py
>
> --
> Medhat
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
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