2017-07-07 1 views
0

Ich weiß, dass wir von einem Kind auf das Modell des Elternteils verweisen können, aber gibt es eine Möglichkeit, es andersherum zu haben?Kann eine Elternklasse prüfen, ob die Kindklasse ein solches Feld hat?

Entschuldigung für jeden Tippfehler hier.

Lasst uns sagen, wenn Eltern

class Parent(Model): 
    has_this = models.Charfield(max_length=128) 

class Child(Parent): 
    has_that = models.Boolean(default=True) 

ch = Child.objects.filter(id=1).first() // this will be instance of both Parent and Child as expected 

pa = Parent.objects.filter(id=1).first() // is actually return the same as above but does not has the `Child` field `has_that` 

Was ist meine Frage ist, gibt es eine Möglichkeit für pa von einem regelmäßigen Parent Differential wenn eine Abfrage Parent.objects.filter

aufgerufen wird versucht, ich isisntance verwenden, aber für pa, es ist nur wahr, wenn es Parent für ch ist, gilt es für beide. Ich kann mir keinen anderen Weg vorstellen, dies zu ändern.

Auch Parent wird nicht abstrakt sein.

P.S. Ich dachte daran, hasattr zu verwenden, aber das würde auch nicht funktionieren.

Vielen Dank im Voraus.

+0

Klingt wie Sie wollen [Django Modellvererbung - nur Instanzen der Elternklasse in einer Abfrage wollen] (https://stackoverflow.com/questions/11853850/django-model-inheritance-only-want-instances-of-parent -Klasse-in-einer-Abfrage) – dhke

Antwort

1

können Sie Unterklasse Eigenschaften verweisen, indem die Unterklasse als Feldnamen:

Parent.objects.filter(child__isnull=True) 

liefert alle blanken Parent Instanzen (die keine Kinder sind).

Dies wird jedoch leicht unhandlich, wenn Sie mehrere abgeleitete Klassen haben.

Natürlich können Sie auch auf diese Weise für die Kinderfelder über die Elternklasse abfragen:

Parent.objects.filter(child__has_that=True) 

ergibt Instanzen Parent, die auch Children mit has_that Satz True sind.

Verwandte Themen