Многоязычная вставка с использованием mongoengine в mongodb

В моем приложении для флэков я использую MongoeEgine. Я пытаюсь вставить несколько документов в свою коллекцию мест в моем MongoDB.

Мой класс документа определяется как

class places(db.Document):

  name = db.StringField(max_length=200, required=True)    
  loc = db.GeoPointField(required=True)

  def __unicode__(self):
    return self.name

    a=[]
    a.append({"name" : 'test' , "loc":[-87,101]})
    a.append({"name" : 'test' , "loc":[-88,101]})
    x= places(a)

Последнее утверждение терпит неудачу

x= places(a)
TypeError: __init__() takes exactly 1 argument (2 given)

Я также попытался сохранить это в своем экземпляре

places.insert(x)
places.save(x)

оба не работают. Пожалуйста, помогите.

Ответы

Ответ 1

Places.objects.insert не принимает список словарей, он должен быть Places экземплярами. Обычными операциями были бы создание отдельных экземпляров Places и сохранение или вставка, например:

Places(name="test", loc=[-87, 101]).save()
Places(name="test 2", loc=[-87, 101]).save()

Однако, если вы хотите сделать массовую вставку, вы можете передать список экземпляров Places и вызвать insert в запросе objects, например:

Places.objects.insert([Places(name="test", loc=[-87, 101]), 
                       Places(name="test 2", loc=[-87, 101])])

Ответ 2

Вы пытаетесь инициализировать объект Документ для нескольких документов одновременно. Если вы посмотрите на класс mongoengine BaseDocument, вы увидите, что его метод __init__ использует словарь аргументов ключевого слова, которые относятся к полям одного документа.

Если вы хотите сделать массовое сохранение, вам нужно создать список экземпляров places и передать его методу insert().

a = []
a.append(places(**{"name": 'test', "loc": [-87,101]}))
a.append(places(**{"name": 'test', "loc": [-88,101]}))
x = places.objects.insert(a)