Dire che ho modelli:Il modo giusto per restituire un'istanza del modello proxy da un'istanza del modello di base in 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
Diciamo che voglio fare:
animals = Animal.objects.all()
for animal in animals:
animal.make_sound()
Voglio tornare una serie di trame e Meows. Chiaramente, potrei semplicemente definire un make_sound nel modello originale che si biforca basato su animal_type, ma poi ogni volta che aggiungo un nuovo tipo di animale (immaginiamo che siano in diverse app), dovrei entrare e modificare la funzione make_sound . Preferirei semplicemente definire i modelli proxy e fargli definire il comportamento da soli. Da quello che posso dire, non c'è modo di restituire istanze miste di Cat o Dog, ma ho pensato che potrei definire un metodo "get_proxy_model" nella classe principale che restituisce un modello di gatto o di cane.
Sicuramente si potrebbe fare questo, e passare qualcosa come la chiave primaria e quindi solo fare Cat.objects.get (pk = passato_in_primario_key). Ma vorrebbe dire fare una query in più per i dati che hai già, che sembra ridondante. C'è un modo per trasformare un animale in un'istanza di gatto o di cane in modo efficiente? Qual è il modo giusto per fare ciò che voglio raggiungere?
È possibile applicare make_sound al modello Animal e aggiungere anche sound = models.charField(). – monkut
Il mio esempio è molto semplice - quello che sto cercando di fare richiede un sacco di lavoro che dipende dal tipo e non può essere memorizzato con il modello. – sotangochips