2013-06-15 7 views
1

Я пытаюсь получить объект из моего Neo4j базы данных с помощью neo4django`objects.get (...)` не работает, как ожидалось

>>> # There is a single Person object in the database, so I get a value 
>>> slug=Person.objects.get().name_slug 
>>> print(slug) 
doe-john 
>>> # ok, it's there 
>>> p=Person.objects.get(name_slug=slug) 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/[...]/src/neo4django/neo4django/db/models/manager.py", line 37, in get 
    return self.get_query_set().get(*args, **kwargs) 
    File "/[...]/lib/python2.7/site-packages/django/db/models/query.py", line 366, in get 
    % self.model._meta.object_name) 
DoesNotExist: Person matching query does not exist. 
>>> p=Person.objects.get(name_slug__exact=slug) 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/[...]/src/neo4django/neo4django/db/models/manager.py", line 37, in get 
    return self.get_query_set().get(*args, **kwargs) 
    File "/[...]/lib/python2.7/site-packages/django/db/models/query.py", line 366, in get 
    % self.model._meta.object_name) 
DoesNotExist: Person matching query does not exist. 

Сообщение об ошибке не имеет смысла. Я только что получил запрошенную строку из самого поля, поэтому должен быть совпадением. Есть идеи? Или я наткнулся на ошибку?

Это действительно странно, так как он работает с другими свойствами, но не с name_slug:

>>> Person.objects.get(surname='Doe') 
<Person: Person object> 
>>> Person.objects.get(given_name='John') 
<Person: Person object> 
>>> Person.objects.get(name_slug='john-doe') 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/[...]/src/neo4django/neo4django/db/models/manager.py", line 37, in get 
    return self.get_query_set().get(*args, **kwargs) 
    File "/[...]/lib/python2.7/site-packages/django/db/models/query.py", line 366, in get 
    % self.model._meta.object_name) 
DoesNotExist: Person matching query does not exist. 
>>> print(p.surname, p.given_name, p.name_slug) 
(u'Doe', u'John', u'john-doe') 

Моя модель определяется как таковую:

class Person(models.NodeModel): 
    surname = models.StringProperty(required=True, indexed=True) 
    given_name = models.StringProperty(required=True, indexed=True) 
    name_slug = models.StringProperty(indexed=True) 

Таким образом, единственное отличие состоит в том, что это а не required, но это не имеет значения, в моем понимании документации.

+0

В журнале запросов? –

+0

Или если не журнал запросов (я не уверен, есть ли у него Neo4j), использование django-debug-toolbar с панелью Neo4j REST может помочь. –

+0

Это против мастера neo4django или версии на PyPi? –

ответ

1

Я не могу воспроизвести это с помощью нео-диджанго-мастера, на Neo4j 1.9.

Я создал test_models.py

from neo4django.db import models 

class Person(models.NodeModel): 
    class Meta: 
     # since test_models isn't in an app 
     app_label='test' 
    surname = models.StringProperty(required=True, indexed=True) 
    given_name = models.StringProperty(required=True, indexed=True) 
    name_slug = models.StringProperty(indexed=True) 

, а затем побежал

>>> from test_models import Person 
>>> john = Person.objects.create(surname=u'Doe', given_name=u'John', name_slug=u'john-doe') 
>>> Person.objects.get(name_slug='john-doe') 
<Person: Person object> 
>>> john == Person.objects.get(name_slug='john-doe') 
True 
>>> jane = Person.objects.create(surname=u'Doe', given_name=u'Jane', name_slug=u'jane-doe') 
>>> jane == Person.objects.get(name_slug='jane-doe') 
True 
>>> jane == Person.objects.get(given_name='Jane', surname='Doe') 
True 

Мысли?

Смежные вопросы