Todavía estoy un poco confundido acerca de la relación de los modelos Proxy con sus Superclases en django. Mi pregunta ahora es ¿cómo obtengo una instancia de un modelo Proxy a partir de una instancia ya recuperada de la Superclase?usando django, ¿cómo construyo una instancia de objeto proxy de una instancia de objeto de superclase?
Por lo tanto, digamos que tengo:
class Animal(models.Model):
type = models.CharField(max_length=20)
name = models.CharField(max_length=40)
class Dog(Animal):
class Meta:
proxy = True
def make_noise(self):
print "Woof Woof"
Class Cat(Animal):
class Meta:
proxy = True
def make_noise(self):
print "Meow Meow"
animals = Animal.objects.all()
for animal in animals:
if (animal.type == "cat"):
animal_proxy = # make me a cat
elif (animal.type == "dog"):
animal_proxy = # make me a dog
animal_proxy.make_noise()
OK. Así que .. ¿Qué pasa en que no requiere una consulta de nuevo a la base de datos como "# Me hacen un gato":
animal_proxy = Cat.objects.get(id=animal.id)
¿Hay una manera simple de crear una instancia de gato desde una instancia de Animal que yo sé que es un gato?
Soy consciente de que voy contra el grano de Django. Hago esto porque Django no me deja hacer lo que quiero, que es obtener una lista de objetos que están almacenados en la misma tabla pero que tienen diferentes propiedades sin encadenar los resultados. Creé un administrador de tipos de conocimiento, pero a nivel de superclase y ahora solo necesito 'convertir' las instancias de objetos de superclase devueltos para que sean los objetos de la clase de proxy. ¿Hay alguna manera de hacer esto? –
En realidad, ya he hecho esto, pero actualmente estoy haciendo una llamada a la base de datos de la siguiente manera: animal_proxy = Cat.objects.get (id = animal.id) Quiero algo como animal_proxy = (Cat) animal. Sé que tiene que haber un truco de pitón que pueda hacer esto por mí. –
@Bubba: vea esta pregunta. Las respuestas pueden ser de su interés. http://stackoverflow.com/questions/2218867/right-way-to-return-proxy-model-instance-from-a-base-model-instance-in-django –