`objects.get(...)`无法正常工作 [英] `objects.get(...)` does not work as expected
问题描述
我试图从 neo4j 数据库中获取一个对象,使用 neo4django
I'm trying to get an object from my neo4j database using neo4django
>>> # 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.
错误消息不明智。我刚刚收到来自该字段的查询字符串,所以必须成为一个匹配项。有任何想法吗?或者我绊倒了一个错误?
The error message is not sensible. I just received the queried string from the very field, so there must be a match. Any ideas? Or did I stumble upon a bug?
这是非常奇怪的,因为它与其他属性,但不是与 name_slug
:
This is really strange, as it works with the other properties, but not with 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)
所以唯一的区别是它不是 code>,但是在我对文档的理解中应该没有什么区别。
So the only difference is that it's not required
, but that should make no difference, in my understanding of the documentation.
推荐答案
我无法复制这个使用neo4django master,在Neo4j 1.9。
I can't replicate this using neo4django master, on Neo4j 1.9.
我创建了一个test_models.py
I created a 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
想法?
这篇关于`objects.get(...)`无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!