Resolve field name to db field name when using distinct(#260, #264, #269)

This commit is contained in:
Ross Lawley 2013-04-12 14:20:44 +00:00
parent 37740dc010
commit 63edd16a92
4 changed files with 28 additions and 3 deletions

View File

@ -128,4 +128,6 @@ that much better:
* Peter Teichman * Peter Teichman
* Jakub Kot * Jakub Kot
* Jorge Bastida * Jorge Bastida
* Aleksandr Sorokoumov * Aleksandr Sorokoumov
* Yohan Graterol
* bool-dev

View File

@ -4,6 +4,7 @@ Changelog
Changes in 0.7.10 Changes in 0.7.10
================= =================
- Resolve field name to db field name when using distinct(#260, #264, #269)
- Added kwargs to doc.save to help interop with django (#223, #270) - Added kwargs to doc.save to help interop with django (#223, #270)
- Fixed cloning querysets in PY3 - Fixed cloning querysets in PY3
- Int fields no longer unset in save when changed to 0 (#272) - Int fields no longer unset in save when changed to 0 (#272)

View File

@ -1212,8 +1212,11 @@ class QuerySet(object):
.. versionchanged:: 0.5 - Fixed handling references .. versionchanged:: 0.5 - Fixed handling references
.. versionchanged:: 0.6 - Improved db_field refrence handling .. versionchanged:: 0.6 - Improved db_field refrence handling
""" """
return self._dereference(self._cursor.distinct(field), 1, try:
name=field, instance=self._document) field = self._fields_to_dbfields([field]).pop()
finally:
return self._dereference(self._cursor.distinct(field), 1,
name=field, instance=self._document)
def only(self, *fields): def only(self, *fields):
"""Load only a subset of this document's fields. :: """Load only a subset of this document's fields. ::

View File

@ -2486,6 +2486,25 @@ class QuerySetTest(unittest.TestCase):
self.assertEqual(Foo.objects.distinct("bar"), [bar]) self.assertEqual(Foo.objects.distinct("bar"), [bar])
def test_distinct_handles_db_field(self):
"""Ensure that distinct resolves field name to db_field as expected.
"""
class Product(Document):
product_id = IntField(db_field='pid')
Product.drop_collection()
Product(product_id=1).save()
Product(product_id=2).save()
Product(product_id=1).save()
self.assertEqual(set(Product.objects.distinct('product_id')),
set([1, 2]))
self.assertEqual(set(Product.objects.distinct('pid')),
set([1, 2]))
Product.drop_collection()
def test_custom_manager(self): def test_custom_manager(self):
"""Ensure that custom QuerySetManager instances work as expected. """Ensure that custom QuerySetManager instances work as expected.
""" """