Compare commits
2 Commits
860391bcbe
...
0340f9bb7d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0340f9bb7d | ||
|
|
5e0de3014e |
58
app.py
58
app.py
@@ -1575,6 +1575,64 @@ def setup_directus_schema():
|
||||
"failed": len(failed), "results": results})
|
||||
|
||||
|
||||
@app.route("/api/setup-words-pictures", methods=["POST"])
|
||||
def setup_words_pictures():
|
||||
"""
|
||||
Einmalig ausführen: Konfiguriert die M2M-Relation words ↔ pictures
|
||||
via words_pictures Junction in Directus.
|
||||
Idempotent – bereits vorhandene Felder/Relationen werden übersprungen.
|
||||
"""
|
||||
token = request.headers.get("Authorization", "")
|
||||
results = []
|
||||
|
||||
def do(label, method, path, body=None):
|
||||
data, status = _directus(method, path, token, body)
|
||||
ok = status in (200, 201, 204)
|
||||
results.append({"label": label, "status": status, "ok": ok,
|
||||
"err": None if ok else (data.get("errors") or data)})
|
||||
return ok
|
||||
|
||||
# Sicherstellen dass Junction-Collection existiert
|
||||
_ensure_junction("words_pictures", "words_id", "pictures_id", token)
|
||||
|
||||
# special=m2m auf Alias-Felder setzen (idempotent)
|
||||
do("patch pictures.linked_words special", "PATCH", "/fields/pictures/linked_words", {
|
||||
"type": "alias",
|
||||
"meta": {"special": ["m2m"], "interface": "list-m2m",
|
||||
"options": {"template": "{{words_id.title_de}}"},
|
||||
"note": "Verknüpfte Safe Words"},
|
||||
})
|
||||
do("patch words.linked_pictures special", "PATCH", "/fields/words/linked_pictures", {
|
||||
"type": "alias",
|
||||
"meta": {"special": ["m2m"], "interface": "list-m2m",
|
||||
"options": {"template": "{{pictures_id.media}}"},
|
||||
"note": "Verknüpfte Bilder"},
|
||||
})
|
||||
|
||||
# Relation words_pictures.words_id → words
|
||||
do("relation words_pictures.words_id→words", "POST", "/relations", {
|
||||
"collection": "words_pictures", "field": "words_id",
|
||||
"related_collection": "words",
|
||||
"schema": {"on_delete": "CASCADE"},
|
||||
"meta": {"junction_field": "pictures_id",
|
||||
"one_field": "linked_pictures",
|
||||
"one_deselect_action": "nullify"},
|
||||
})
|
||||
# Relation words_pictures.pictures_id → pictures
|
||||
do("relation words_pictures.pictures_id→pictures", "POST", "/relations", {
|
||||
"collection": "words_pictures", "field": "pictures_id",
|
||||
"related_collection": "pictures",
|
||||
"schema": {"on_delete": "CASCADE"},
|
||||
"meta": {"junction_field": "words_id",
|
||||
"one_field": "linked_words",
|
||||
"one_deselect_action": "nullify"},
|
||||
})
|
||||
|
||||
failed = [r for r in results if not r["ok"]]
|
||||
return jsonify({"ok": len(failed) == 0, "total": len(results),
|
||||
"failed": len(failed), "results": results})
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(host="0.0.0.0", port=8000, debug=True)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user