Je m'arrache les cheveux en essayant de résoudre ce problème (j'espère) simple. J'utilise Django-nonrel, et j'essaye d'installer quelques modèles. J'ai simplifié le code ci-dessous:Accéder correctement à la classe dérivée dans la relation OneToOneField dans Django-Nonrel
class Application(models.Model)
name = "Application"
def get_name(self):
print(self.name)
class ExampleApp(Application)
name = "Example Application"
class Site(models.Model)
app = models.OneToOneField(Application, null=True)
id = models.CharField(max_length=1)
# other details not important
Quand j'obtiens une instance de Site
, je voudrais obtenir une instance de la classe dérivée (par exemple ExampleApp
)
class MyView(View):
def get(self, request, *args, **kwargs):
# Presuppose that I have an object with id="a"
site = Site.objects.filter(id="a")
#<Application: Application>
app = site.app
#returns "Application", not "Example Application"
app.get_name()
Comment puis-je accéder à la classe dérivée?
(Idéalement, je voudrais Application
être une classe de base abstraite, mais django ne permet pas des relations de classes de base abstraites. Je définirais champs à l'intérieur Application
, mais django-nonrel ne supporte pas l'héritage multi-table.
Cela ressemble certainement à ce qui m'intéresse. Une idée de savoir si cela fonctionne ou non dans Django-nonrel? – NT3RP
Je ne l'ai pas essayé, mais j'imagine que cela fonctionnerait avec djanog-nonrel, qui est juste une implémentation avec NoSQL, cela ne devrait pas être pertinent pour le support NoSQL. – Furbeenator
La solution ne s'applique pas tout à fait aux circonstances actuelles. Les modèles polymorphes ne semblent pas faire quelque chose de spécial en se référant aux relations. De plus, si je convertis une PolymorphicMetaClass en classe de base, j'obtiens une erreur lorsque j'essaye d'effectuer un downcast: 'L'héritage multi-tables n'est pas supporté par les DB non-relationnels. – NT3RP