Gibt es eine Möglichkeit, ein Objekt abzufragen, ein verschachteltes Stück Daten aus einem JSONField
Feld zu extrahieren und es dann als benutzerdefiniertes, temporäres Feld für jede Instanz des Querysets verfügbar zu machen?Geschachtelten Wert aus einem Django-Jsonfeld extrahieren
In meinem Anwendungsfall speichere ich Überlaufmetadaten von Twitter's API in einem data
Feld für die spätere Verwendung. Ich möchte auf das verschachtelte Feld followers_count
innerhalb TwitterPost.data
zugreifen können.
Ich habe die Dokumentation über das Filtern nach geschachtelten Werten gelesen, aber nicht, wie es als temporäres Feld beim Generieren eines Abfrage-Sets extrahiert wird.
In ähnlicher Weise habe ich die annotate
Dokumente für Möglichkeiten zum Erstellen eines benutzerdefinierten temporären Felds gelesen, aber die Beispiele verwenden alle Aggregationsfunktionen auf einfache Felder, also nicht JSONFields
.
Vielen Dank im Voraus für Anregungen.
Beispiel Modell:
from django.contrib.postgres.fields import JSONField
class TwitterPost(models.Model):
id = models.IntegerField()
data = JSONField()
Beispiel JSON-Wert für die data
Feld:
{
'followers_count': 7172,
"default_profile_image": false,
"profile_text_color": "000000"
}
Pseudocode für das, was Ich mag würde der Lage sein, zu tun:
TwitterPost.objects.annotate(followers_count=instance.data.followers_count)
Ja, das wurde in einer späteren Version von Django (1.11 IIRC) hinzugefügt und ich benutze es, seit ich diese Frage gestellt habe. Danke, dass Sie die Antwort für zukünftige Suchende hinterlassen haben. –