All saves on exisiting items do set / unset operations only on changed fields. * Note lists and dicts generally do set operations for things like pop() del[key] As there is no easy map to unset and explicitly matches the new list / dict fixes #18
56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import unittest
|
|
|
|
from mongoengine import *
|
|
|
|
from django.template import Context, Template
|
|
from django.conf import settings
|
|
settings.configure()
|
|
|
|
class QuerySetTest(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
connect(db='mongoenginetest')
|
|
|
|
class Person(Document):
|
|
name = StringField()
|
|
age = IntField()
|
|
self.Person = Person
|
|
|
|
def test_order_by_in_django_template(self):
|
|
"""Ensure that QuerySets are properly ordered in Django template.
|
|
"""
|
|
self.Person.drop_collection()
|
|
|
|
self.Person(name="A", age=20).save()
|
|
self.Person(name="D", age=10).save()
|
|
self.Person(name="B", age=40).save()
|
|
self.Person(name="C", age=30).save()
|
|
|
|
t = Template("{% for o in ol %}{{ o.name }}-{{ o.age }}:{% endfor %}")
|
|
|
|
d = {"ol": self.Person.objects.order_by('-name')}
|
|
self.assertEqual(t.render(Context(d)), u'D-10:C-30:B-40:A-20:')
|
|
d = {"ol": self.Person.objects.order_by('+name')}
|
|
self.assertEqual(t.render(Context(d)), u'A-20:B-40:C-30:D-10:')
|
|
d = {"ol": self.Person.objects.order_by('-age')}
|
|
self.assertEqual(t.render(Context(d)), u'B-40:C-30:A-20:D-10:')
|
|
d = {"ol": self.Person.objects.order_by('+age')}
|
|
self.assertEqual(t.render(Context(d)), u'D-10:A-20:C-30:B-40:')
|
|
|
|
self.Person.drop_collection()
|
|
|
|
def test_q_object_filter_in_template(self):
|
|
|
|
self.Person.drop_collection()
|
|
|
|
self.Person(name="A", age=20).save()
|
|
self.Person(name="D", age=10).save()
|
|
self.Person(name="B", age=40).save()
|
|
self.Person(name="C", age=30).save()
|
|
|
|
t = Template("{% for o in ol %}{{ o.name }}-{{ o.age }}:{% endfor %}")
|
|
|
|
d = {"ol": self.Person.objects.filter(Q(age=10) | Q(name="C"))}
|
|
self.assertEqual(t.render(Context(d)), u'D-10:C-30:') |