/ / Django - získajte príklady základného modelu ako zodpovedajúce modely proxy - python, django-modely

Django - získajte inštancie základného modelu ako zodpovedajúce proxy modely - python, django-models

Mám základný model Django a modely proxy, ktoré ho podtriedia. Prepíšu všetky metódy. Potrebujem opakovať všetky prípady základného modelu (t. J. for i in BaseModel.objects.all()), ale namiesto zástupných metód deklarovaných v základnej triede mohli volať metódy ich zodpovedajúcich tried proxy.

Ako k tomu pristupujem? Vlastne mám modelové pole, ktoré môže určiť, ktorý proxy model zodpovedá každej konkrétnej inštancii. Možno to môžem využiť a nejakým spôsobom preniesť základnú triedu do podtriedy? Som na rozpakoch.

EDIT: Pozrel som sa táto otázka a podarilo sa mu zmeniť triedu písomne ​​na self.__class__, Je však bezpečné používať s Djangom?

odpovede:

2 pre odpoveď č. 1
proxymodels = {"Foo": FooModel, "Bar": BarModel}

for o in BaseModel.objects.all():
proxymodels[o.type].method_name(o, *args, **kwargs)

Metódy sa volajú na proxy modeloch (triedy), odovzdávanie inštancií BaseModel ako prvý argument plus akékoľvek ďalšie argumenty, ktoré chcete odovzdať. Týmto spôsobom sa metódy nazývajú, akoby boli vyvolané na inštancii proxy modelu.

PS: Preradenie seba .__ class__ sa mi zdá veľmi hackerské.