Register Your Neo4j-Based Models to Django Admin
A Paradise Papers Example
If you’re a Django developer, you may have already found the popular py2neo toolkit and may have some experience using Neomodel and/or the Neo4j python driver directly. But how well do these tools play with Django?
Thankfully for Django developers, the Neo4j ecosystem provides a quick way to spin up an example app — the Paradise Papers Search App — based on the Paradise Papers dataset, conveniently available on Neo4j Sandbox.
This post will be a quick walkthrough of how to register a model on the Paradise Papers Search app. For more details, check out our previous post on the topic here:
Local Setup — Sandbox Database
First step, set up your local environment:
git clone git@github.com:neo4j-examples/paradise-papers-django.git
In a virtual environment, install the requirements:
pip install -r requirements.txt
Next you’ll need to point your app to a sandbox instance of the database.
In Neo4j Sandbox, create an account and select Paradise Papers by ICIJ.
Back in the Sandbox UI, tap “Connection details” to find the database’s Bolt URL, username, and password.
In your local environment, set the DATABASE_URL variable using the credentials found in the Sandbox admin:
export DATABASE_URL=bolt://<Username>:<Password>@<IP Address>:7687
In paradise_papers_search/fetch_api/admin
, add the models you would like to explore using the admin:
from django.contrib import admin as dj_admin
from django_neomodel import admin as neo_admin
from .models import Entity
class EntityAdmin(dj_admin.ModelAdmin):
list_display = (“name”,)
neo_admin.register(Entity, EntityAdmin)
Add the admin URL to urls.py
(if you haven’t done so already):
from django.conf.urls import url, include
from django.views.generic import TemplateView
from django.contrib import admin
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='index.html'), name='index'),
url(r'^fetch/', include('fetch_api.urls')),
url(r"^admin/", admin.site.urls)
]
Because Django’s admin authentication still goes through Django models, you will you need to set up a (relational) user database in your settings file and run the migrations.
Example settings snippet:
DATABASES = {
'default': {
'NAME': 'papers.db',
'ENGINE': 'django.db.backends.sqlite3',
'USER': '',
'PASSWORD': '',
'PORT': '',
},
}
Running the migrations:
./manage.py migrate
After that, create the admin superuser:
./manage.py createsuperuser
Run the app!
python manage.py runserver — settings=paradise_papers_search.settings.dev
Start searching at https://127.0.0.1:8000/
Log in to the admin at https://127.0.0.1:8000/admin
That’s it!
Next Steps
After testing out the ICIJ Panama Papers database, you may want to try using some of the data native to your Django application. Test out converting your relational dataset using the Neo4j ETL Tool:
Neo4j ETL Tool – Interactive Relational Database Data Import – Neo4j Labs
Resources
Looking for more details on how Neo4j was used in the Panama Papers investigation? Check out more coverage here:
- An In-Depth Graph Analysis of the Paradise Papers
- How the ICIJ Used Neo4j to Unravel the Panama Papers
- Analyzing the Panama Papers with Neo4j: Data Models, Queries & More
- The Panama Papers: Why It Couldn’t Have Happened Ten Years Ago
Register Your Neo4j-Based Models to the Django Admin was originally published in Neo4j Developer Blog on Medium, where people are continuing the conversation by highlighting and responding to this story.