Integrace s Neo4j
Created by: msgre
Synchronizace Django objektu do databaze Neo4j.
Modely
Napsal jsem obecnou mixin tridu. Kazdy model, ktery se bude chtit synhronizovat do Neo4j bude muset mit jako predka tridu GraphModel
, a uvnitr pretizenou metodu graph_data
ktera vrati dict
s daty:
from django.db import models
from django_extensions.db.models import TimeStampedModel
from common.models import GraphModel
class Manufacturer(TimeStampedModel, GraphModel):
name = models.CharField(max_length=100)
def graph_data(self):
return {
'name': self.name,
}
Pokud ma model nejake relace (1:1, 1:N, M:M), je nutne do tridy pridat i popis toho, jak se ma relace namapovat do Neo4j:
class Car(TimeStampedModel, GraphModel):
model = models.CharField(max_length=100)
manufacturer = models.ForeignKey(Manufacturer, on_delete=models.SET_NULL, null=True)
def graph_data(self):
return {
'name': self.name,
}
def related_graph_data(self):
return [
# Car - BELONGS_TO -> Manufacturer
("-", "BELONGS_TO", "->", self.manufacturer)
]
Admin
Aby se obsah Django modelu zrcadlil do Neo4j databaze i behem CRUD operaci provadenych v administracnim rozhrani, je treba pridat do definice admin tridy mixinu GraphAdmin
:
from django.contrib import admin
from common.admin import GraphAdmin
class SubjectAdmin(GraphAdmin, admin.ModelAdmin):
list_display = ("name", "code")
Management command
Command pro jednorazove preliti kompletniho datasetu z konkretnich modelu, napr:
./manage.py graph_sync colleges.College colleges.Faculty
Ukazka
Konkretni relace mezi nody v Neo4j budeme muset doladit (upravou metod related_graph_data
)