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() 

  • Fehler beim Importieren eines Python-Moduls in Django
  • Wie Affe Patch Django?
  • Django 1.7 Fehler NoReverseMatch bei '/ post /'
  • Django-CKEditor wird keine Bilder machen
  • Wie man eine Fehlermeldung in django benutzerdefinierte Authentifizierung Backend haben
  • Ermitteln Sie, ob Sellerie verfügbar / ausgeführt wird
  • 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.