python / intermediate
Snippet
Abfragen von PostgreSQL ArrayField-Listenelementen im Django ORM
Djangos `ArrayField` ermöglicht das Speichern von Listen in PostgreSQL-Spalten. Spezifische Array-Abfragen lassen sich über Index-Lookups (z. B. `tags__0`) und Längen-Lookups (`tags__len__gte`) direkt in der ORM-Syntax durchführen.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
from django.db import modelsfrom django.contrib.postgres.fields import ArrayFieldclass ArticlePost(models.Model):tags = ArrayField(models.CharField(max_length=50), default=list)def find_articles_by_primary_tag(tag_name: str):matched_primary = ArticlePost.objects.filter(tags__0=tag_name)multi_tagged = ArticlePost.objects.filter(tags__len__gte=2)return matched_primary.intersection(multi_tagged)
django
Erklärung
1
tags = ArrayField(models.CharField(max_length=50), default=list)
Definiert ein Datenbankfeld, das eine dynamische Liste von Strings speichert.
2
matched_primary = ArticlePost.objects.filter(tags__0=tag_name)
Filtert Datensätze, deren erstes Array-Element (Index 0) dem Tag-Namen entspricht.
3
multi_tagged = ArticlePost.objects.filter(tags__len__gte=2)
Filtert Datensätze, deren Array mindestens zwei Elemente enthält.
4
return matched_primary.intersection(multi_tagged)
Gibt das Schnittmengen-QuerySet beider Array-Filterkriterien zurück.