2017-09-29 1 views
9

Je m'excuse d'avance car la façon de penser de Django est encore très étrangère à moi. J'essaie de générer une page très simple qui justs répertorie tous les résultats d'une requête de chiffrement simple en utilisant Neo4j et Django (1.9.7) et j'utilise le pilote Python Neo4j pour accéder à la base de données à partir de Django. Cependant, je suis coincé et j'ai atteint le point où je ne fais qu'essayer aveuglément les choses, en tant que tel, je voudrais des conseils/conseils sur la façon dont les bases de ce que j'essaie de réaliser devraient ressembler.Interroger une BD Neo4j en utilisant Django

models.py

from django.views.generic.listimport ListView 
from neo4j.v1 import GraphDatabase, basic_auth 
from django.db import models 

# Connect to DB 
driver=GraphDatabase.driver("foo1",auth=basic_auth("foo2","foo3")) 
session=driver.session() 

class Stuff(models.Model): 
    query = "MATCH (t:Time) return t" 
    results=session.run(query) 
    # Sanity check -> This just shows that the database and query both work 
    for foo in results: 
    print foo 
    break 
    def __str__(self): 
    return results 

views.py

from django.views.generic.list import ListView 
from .models import Stuff 

# I assume that I should be using a ListView here (as I was trying to get a queryset or similar from my models). 
class IndexView(ListView): 
    template_name = 'index.html' 

    def get_queryset(self): 
    fooList = [] 
    for record in Stuff.objects.get(): 
     fooList.append(record) 
    return fooList 

index.html (non testé comme je l'ai pas réussi à obtenir ce 'spectacle' encore)

{% block body %} 

{% if fooList %} 
    <h1>Woot!</h1> 
{% endif %} 

{% endblock %} 

Les bits ci-dessus ne fonctionnent évidemment pas et se plaignent de Stuff ne pas avoir objects, mais je suis totall J'ai perdu sur comment continuer (comme j'ai été incapable de trouver de bons exemples/documentation sur l'utilisation de ce pilote dans Django).

+0

Êtes-vous en train de dire que vous n'obtenez pas de 'résultats 'à partir de la requête Neo4j? Pourriez-vous s'il vous plaît être plus précis avec le problème auquel vous faites face? – EngineeredBrain

Répondre

1

Documentation de session objet pilote python Neo4j état de la méthode d'exécution qui

run(statement, parameters=None, **kwparameters) 

il retourne objet StatementResult comme documenté here

Ainsi, selon les documents il n'y a pas de propriété objects et donc la méthode .objects.get() ne existe.

façon de faire les dossiers d'accès à retour StatementResult est représenté en example comme suit:

for record in result: 
     print("%s %s" % (record["title"], record["name"])) 

Donc, dans votre cas, vous pouvez faire:

for record in Stuff: 
    fooList.append(record) 
+0

C'est l'une des choses que j'avais essayées précédemment, ce qui fait que l'objet '' ModelBase 'n'est pas itérable'. –

+0

En accord avec ce SO [answer] (https://stackoverflow.com/questions/18512491/typeerror-object-is-not-iterable) Vous ne pouvez pas itérer sur une instance de modèle. Cependant il y a une solution si vous en avez encore besoin. – hlihovac

+0

Je suis toujours en train de chercher un moyen de faire fonctionner cette base de données (en interrogeant une base de données neo4j et en affichant les résultats avec ce pilote), sachez que vous ne vous en doutez pas qu'utiliser 'model' d'une telle manière est même correct lors de l'utilisation d'une base de données neo4j existante. –

0

vous pouvez écrire un appartement RESTful API pour communiquer avec un frontend peut-être écrit dans React Angular2 pour vider et afficher vos données. Donc d'abord, vous pouvez utiliser DRF (Django Rest Framework), alors tout se passera principalement dans vos views.py et serializers.py et un peu dans votre models.py. Pourquoi éviter le modèle Django, la charge de la requête peut affecter votre application pour fonctionner correctement.