StringField определяется как уникальный, но дубликаты сохраняются в режиме без вывода сообщений - PullRequest
1 голос
/ 27 марта 2012

Я определил простой Документ, например:

class Company(Document):
    screen_name = StringField(max_length=100, required=True, unique=True)
    official_name = StringField(required=False)

    meta = {
        'indexes': [{'fields': 'screen_name', 'unique': True}]
    }

, но когда я пишу тест

@use_tdb
def test_company3():
    """ test company2 """
    company = Company(screen_name='asdasd')
    company.save()
    company = Company(screen_name='asdasd')
    with nt.assert_raises(OperationError):
        company.save()
        pprint([(x.id, x.screen_name,) for x in Company.objects.all()])

Он фактически сохраняет их обоих.И я вижу в выводе:

[(ObjectId('4f719f915c121a21ad000003'), u'asdasd'),
 (ObjectId('4f719f915c121a21ad000004'), u'asdasd')]

Есть идеи, что я сделал не так?

Спасибо

1 Ответ

2 голосов
/ 27 марта 2012

То есть может потребоваться drop_collection.

def test_company3():
    """ test company2 """
    Company.drop_collection()
    company = Company(screen_name='asdasd')
    company.save()
    company = Company(screen_name='asdasd')
    with nt.assert_raises(OperationError):
        company.save()
    pprint([(x.id, x.screen_name,) for x in Company.objects.all()])

См. Этот тест.Mongoengine - это все испытания пройдены.https://github.com/hmarr/mongoengine/blob/master/tests/document.py#L875

Команда Mongoengine Недавно перешли на 0.6.3.

...