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

  • Formschönes Mapping gibt bei der Serialisierung Fehler auf meine Geometrie
  • Durchführen einer getattr () Stil-Lookup in einer Django-Vorlage
  • Django MVC Muster für nicht datenbankgetriebene Modelle?
  • Django cursor.execute (QUERY) viel langsamer als das Ausführen der Abfrage in der Postgres-Datenbank
  • Django userena error Reverse für 'password_reset_done' mit Argumenten '()' und Keyword-Argumente '{}' nicht gefunden. 0 Muster (s) versucht: []
  • Django DetailView - wie man 'request' in get_context_data verwendet
  • 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.