Невозможно выполнить запрос с использованием идентификаторов - Django MongoDB Engine - PullRequest
0 голосов
/ 31 января 2011

Я использую django-nonrel и django-mongodb-engine

У меня есть модель Django, хранящаяся в PostgreSQL :

class Author(models.Model):
    name = models.CharField(max_length=100)
    created = models.DateTimeField(auto_now_add=True)

У меня есть MongoDB сохраненная модель:

class Post(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
    created = models.DateTimeField(auto_now_add=True)

    author = models.ForeignKey(Author)

Всякий раз, когда я пытаюсь отфильтровать записи по идентификатору автора:

posts = Post.objects.filter(author__id=1)

Я получаю следующую ошибку:

/usr/local/lib/python2.6/dist-packages/bson/objectid.pyc in __validate(self, oid)
    158                     raise InvalidId("%s is not a valid ObjectId" % oid)
    159             else:
--> 160                 raise InvalidId("%s is not a valid ObjectId" % oid)
    161         else:
    162             raise TypeError("id must be an instance of (str, ObjectId), "

InvalidId: 1 is not a valid ObjectId

In [22]: Post.objects.filter(author__id=1)

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 31 января 2011

Я полагаю, что "монго" будет заключаться в том, чтобы вставлять детали автора в пост, а также все комментарии во встроенные документы. Наличие нескольких связанных коллекций (таблиц) не лучший способ решить эту проблему в вашем случае.

Сократите использование ForeignKey настолько, насколько это возможно, и просто вставьте данные. Я считаю, что MongoEngine имеет класс Document и EmbeddedDocument, от которого вы можете наследовать.

Почему вы хотите использовать mongodb против mysql? У вас должен быть ОГРОМНЫЙ блог ...; -)

0 голосов
/ 06 февраля 2011

Невозможно смешать эти два двигателя.Простейшим объяснением этого является то, что первичные ключи MongoDB являются строковыми объектами, а * SQL pks являются целыми числами.Вы не можете использовать оба, выберите один.

0 голосов
/ 31 января 2011

Может быть:

author = Author.objects.get(pk=1)
posts = author.post_set.all()
...