1

「ノード」、「リンク」は保存できますが、「グラフ」は保存できません (以下のエラーを参照)。pymongo 2.1.1、Django-NoRel、Python 2.7 を使用:

from django.db import models
from djangotoolbox.fields import SetField, ListField, EmbeddedModelField

class Graph(models.Model):
    links = ListField(EmbeddedModelField('Link'))

class Link(models.Model):
    parent = EmbeddedModelField('Node')
    child = EmbeddedModelField('Node')

class Node(models.Model):
    extent = SetField() # set of strings e.g. "Gene-Bmp4"
    intent = SetField() # set of strings

--

n1 = Node(extent=set(["Gene-bmp4"]),intent=set(["Attr1", "Attr2"]))
n2 = Node(extent=set(["Gene-fp4"]),intent=set(["Attr3", "Attr4"]))
link = Link(parent=n1, child=n2)
links = [link]
g = Graph(links=links)
g.save()

エラーが発生します:

/Library/Python/2.7/site-packages/pymongo-2.1.1-py2.7-macosx-10.7-intel.egg/pymongo/collection.py:312: RuntimeWarning: エンコードできませんでした - Python モジュールをリロードして再試行しています. InvalidDocument 例外が発生せずにこれが表示される場合は、api.mongodb.org/python/current/faq.html#does-pymongo-work-with-mod-wsgi を参照してください。

Exception Type:     InvalidDocument
Exception Value:    Cannot encode object: set(['Attr2', 'Attr1'])
Exception Location:     /Library/Python/2.7/site-packages/pymongo-2.1.1-py2.7-macosx-10.7-intel.egg/pymongo/collection.py in insert, line 312

誰が私が何をすべきか考えていますか??

4

2 に答える 2

2

私にはバグのように見えます。https://github.com/django-nonrel/djangotoolboxでチケットを開いてください

于 2012-04-13T19:20:26.570 に答える
1

ここでの問題は、BSON には「set」型がないため、「set」型のオブジェクトを BSON としてエンコードできないことです。

最善の解決策は、グラフを保存する前にセットを配列に変換することです。

于 2012-04-13T17:22:50.220 に答える