Thank you for the pointer to ticket #11618, Stefan. At this point, I don't care if the workaround is ugly -- if it actually works, at least I'll be able to move forward with this project. I'll test it out and check back in to confirm whether it does.
On Nov 7, 9:03 am, Stefan Foulis <stefan.fou...@gmail.com> wrote: > As far as I know there is no existing api to convert a 'Place' into a > 'Restaurant' with multi-table inheritance in django. There is a ticket > about this [1]. And in another ticket [2] that is marked as a > duplicate but seems to have an example of how to solve this problem > until there is a standard api for the operation. Translated to the > Restaurant example this would be: > > restaurant = Restaurant(place_ptr = place) > for f in place._meta.local_fields: setattr(restaurant, f.name, > getattr(place, f.name)) > restaurant.save() > > [1]http://code.djangoproject.com/ticket/7623 > [2]http://code.djangoproject.com/ticket/11618 > > On Nov 4, 9:25 pm, ringemup <ringe...@gmail.com> wrote: > > > I have an existing model that I want to extend using multi-table > > inheritance. I need to create a child instance for each parent > > instance in the database, but I can't figure out how. I've scoured > > google and haven't come up with anything other than Ticket #7623[1]. > > Here are some of the things I've tried... > > > Let's adapt the Place / Restaurant example from the docs: > > > class Place(models.Model): > > name = models.CharField(max_length=50) > > address = models.CharField(max_length=80) > > > class Restaurant(Place): > > place = models.OneToOneField(Place, parent_link=True, > > related_name='restaurant') > > serves_hot_dogs = models.BooleanField() > > serves_pizza = models.BooleanField() > > > I want to do the following, in essence: > > > for place in Place.objects.all(): > > restaurant = Restaurant(**{ > > 'place': place, > > 'serves_hot_dogs': False, > > 'serves_pizza': True, > > }) > > restaurant.save() > > > Of course, doing this tries to also create a new Place belonging to > > the new Restaurant, and throws an error because no values have been > > specified for the name and address fields. I've also tried: > > > for place in Place.objects.all(): > > restaurant = Restaurant(**{ > > 'serves_hot_dogs': False, > > 'serves_pizza': True, > > }) > > place.restaurant = restaurant > > place.save() > > > This, however, doesn't create any records in the restaurant table. > > > Any suggestions? > > > [1]http://code.djangoproject.com/ticket/7623 > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.