Django-Modellvererbung – nur Instanzen der übergeordneten Klasse in einer Abfrage

Sagen wir, ich habe 2 Modelle, einer ist der Elternteil eines anderen. Wie kann ich alle Orte abfragen, die keine Restaurants in Django sind? Place.objects.all () würde alle Restaurants richtig? Ich möchte die Kinder aus den Ergebnissen ausschließen. Vielen Dank!

class Place(models.Model): name = models.CharField(max_length=50) address = models.CharField(max_length=80) class Restaurant(Place): serves_hot_dogs = models.BooleanField() serves_pizza = models.BooleanField() 

  • Wie mache ich ein gleiches Django-Quaryset-Filter?
  • Anzahl der Datensätze nach Datum in Django
  • Django Aggregation: Summation der Multiplikation von zwei Feldern
  • TypeError: 'RelatedManager' Objekt ist nicht iterable
  • Django - Gruppe By mit Datumsteil alleine
  • Abfrage für Anhänger im News-Feed-basierten Datenmodell in Django
  • Queryset von Personen mit einem Geburtstag in den nächsten X Tagen
  • Django, Abfrage Filterung von Modell-Methode
  • 3 Solutions collect form web for “Django-Modellvererbung – nur Instanzen der übergeordneten Klasse in einer Abfrage”

    Nach der Dokumentation können Sie die Existenz des Kleinbuchstabennamens als Attribut überprüfen:

     places = Place.objects.all() not_restaurants = [p for p in places if not hasattr(p, 'restaurant')] 

    Der einfache Weg ist, ein place_type Attribut auf dem Place Modell zu haben und dann überschreiben Sie für Place , Restaurant und jede andere Basisklasse, um es richtig zu setzen, wenn es place_type wird. Sie könnten dann mit Place.objects.filter(place_type='PLACE') abfragen. Es könnte andere Wege geben, aber sie werden sehr schnell sehr behaart.

    Filtern Sie auf Djangos automatisch erstelltem OneToOneField . Wenn es IS NULL , ist dieser Place kein Restaurant .

     non_restaurant_places = Place.objects.filter(restaurant__isnull=True) 
    Python ist die beste Programmiersprache der Welt.