2017-09-29 21 views
9

Przepraszam z wyprzedzeniem, ponieważ sposób myślenia Django wciąż jest dla mnie bardzo obcy. Próbuję wygenerować bardzo prostą stronę, która słusznie wymienia wszystkie wyniki z prostej kwerendy przy użyciu Neo4j i Django (1.9.7) i używam sterownika Python Neo4j do dostępu do bazy danych z Django. Jednak utknąłem i osiągnąłem punkt, w którym po prostu ślepo próbuję rzeczy, jako takie chciałbym wskazówek/porad, jak powinny wyglądać podstawy tego, co próbuję osiągnąć.Wywoływanie bazy danych Neo4j za pomocą 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 (nie testowane, bo nie udało się uzyskać to 'koncert' jeszcze)

{% block body %} 

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

{% endblock %} 

Powyższe bity oczywiście nie działają i narzekają na Stuff nie mając żadnego objects, ale jestem totall zagubiłem się, aby kontynuować (ponieważ nie udało mi się znaleźć żadnych dobrych przykładów/dokumentacji na temat używania tego sterownika wewnątrz Django).

+0

Czy mówisz, że nie dostajesz "wyników" z zapytania Neo4j? Czy mógłbyś bardziej szczegółowo poradzić sobie z problemem, przed którym stoisz? – EngineeredBrain

Odpowiedz

1

Documentation z session obiektu w neo4j kierowcy pyton stanie metoda run że

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

zwraca StatementResult obiekt jako udokumentowane here

Więc według docs nie ma objects własność i dlatego .objects.get() metoda nie istnieje.

Prawy sposób to zrobić rekordy dostępu w zwracanej StatementResult pokazano example następująco:

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

Więc w twoim przypadku może chcieć zrobić:

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

Jest to jedna z rzeczy, które wcześniej wypróbowałem, dzięki czemu obiekt 'ModelBase 'nie jest iterowalny. –

+0

Skorzystanie z instrukcji SO [odpowiedź] (https://stackoverflow.com/questions/18512491/typeerror-object-is-notable) Nie można wykonać iteracji po wystąpieniu modelu. Istnieje jednak rozwiązanie, jeśli nadal tego wymagasz. – hlihovac

+0

Nadal szukam sposobu, aby to zadziałało (możliwość wysyłania zapytań do bazy danych neo4j i pokazywania wyników za pomocą tego sterownika), po prostu pamiętaj, że podczas koncentrowania się na 'modelu', którego sam nie jestem w 100% pewny że używanie 'modelu' w taki sposób jest poprawne nawet przy użyciu istniejącej bazy danych neo4j. –

0

można napisać płaski spokojny Interfejs API do komunikacji z interfejsem może być napisany w React Angular2, aby zrzucać i wyświetlać dane. Po pierwsze, możesz użyć DRF (Django rest Framework), wtedy wszystko będzie się działo głównie w twoich views.py i serializers.py i trochę w twoich modelach .py. Po co unikać szablonu Django, obciążenie zapytania może wpłynąć na płynną pracę aplikacji.

Powiązane problemy