Django ORM. Unterabfrage verbinden
Ich habe eine Tabelle, die eine Liste einiger Websites und eine Tabelle mit Statistiken enthält.
class Site(models.Model):
domain_name = models.CharField(
max_length=256,
unique=True,
)
class Stats(models.Model):
date = models.DateField()
site = models.ForeignKey('Site')
google_pr = models.PositiveIntegerField()
class Meta:
unique_together = ('site', 'date')
Ich möchte alle Websites und Statistiken für ein konkretes Datum sehen. Wenn für das Datum kein Statistikdatensatz vorhanden ist, darf die Auswahl nur eine Site enthalten.
Wenn ich benutze:
Site.objects.filter(stats__date=my_date)
Ich werde keine Websites erhalten, für die keine Aufzeichnungen vorliegenmy_date
imstats
Tabelle. Denn in diesem Fall sieht die SQL-Abfrage folgendermaßen aus:
SELECT *
FROM site
LEFT OUTER JOIN stats ON site.id = stats.site_id
WHERE stats.date = 'my_date'
Die Abfragebedingung schließt Datensätze mit NULL-Daten aus, und Websites ohne Statistik werden nicht in die Auswahl aufgenommen.
In meinem Fall benötige ich eine Join-Tabelle, die bereits nach Datum gefiltert wurde:
SELECT *
FROM site
LEFT OUTER JOIN
(SELECT *
FROM stats
WHERE stats.date = 'my-date') AS stats
ON site.id = stats.site_id
Wie kann ich diese Abfrage in Django ORM übersetzen?
Vielen Dank.