Decir que tengo modelos:Forma correcta de devolver la instancia del modelo de proxy desde una instancia de modelo base en Django?
class Animal(models.Model):
type = models.CharField(max_length=255)
class Dog(Animal):
def make_sound(self):
print "Woof!"
class Meta:
proxy = True
class Cat(Animal):
def make_sound(self):
print "Meow!"
class Meta:
proxy = True
Digamos que quiero hacer:
animals = Animal.objects.all()
for animal in animals:
animal.make_sound()
Quiero volver a una serie de ladridos y maullidos. Claramente, podría definir un make_sound en el modelo original que se basa en animal_type, pero cada vez que agrego un nuevo tipo de animal (imagino que están en diferentes aplicaciones), tendría que entrar y editar esa función make_sound . Preferiría simplemente definir modelos de proxy y hacer que ellos mismos definan el comportamiento. Por lo que puedo decir, no hay forma de devolver instancias mixtas de Cat o Dog, pero pensé que tal vez podría definir un método "get_proxy_model" en la clase principal que devuelve un modelo de gato o de perro.
Seguramente usted podría hacer esto, y pasar algo así como la clave principal y luego simplemente hacer Cat.objects.get (pk = passed_in_primary_key). Pero eso significaría hacer una consulta adicional para los datos que ya tiene que parecen redundantes. ¿Hay alguna manera de convertir a un animal en una instancia de gato o perro de manera eficiente? ¿Cuál es la forma correcta de hacer lo que quiero lograr?
Puede aplicar make_sound al modelo Animal y agregarle un sonido = models.charField() también. – monkut
Mi ejemplo es muy simple: lo que estoy tratando de hacer requiere un montón de trabajo que depende del tipo y no se puede almacenar con el modelo. – sotangochips