From ca3caa403cfda7b97a3f85008cf9d3259ab35f33 Mon Sep 17 00:00:00 2001 From: "Rinat R. Akhtamov" Date: Wed, 9 Jul 2014 13:01:26 +0600 Subject: [PATCH 1/2] #52. Add ordering by fields in embedded models --- djangotoolbox/db/basecompiler.py | 5 ++++- djangotoolbox/fields.py | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/djangotoolbox/db/basecompiler.py b/djangotoolbox/db/basecompiler.py index 71d9ec8..9bc166c 100644 --- a/djangotoolbox/db/basecompiler.py +++ b/djangotoolbox/db/basecompiler.py @@ -553,7 +553,10 @@ def _get_ordering(self): if name == 'pk': name = opts.pk.name - field_ordering.append((opts.get_field(name), ascending)) + if '.' in name: + field_ordering.append((RawFakeField(name), ascending)) + else: + field_ordering.append((opts.get_field(name), ascending)) return field_ordering diff --git a/djangotoolbox/fields.py b/djangotoolbox/fields.py index c4e877b..4a341a1 100644 --- a/djangotoolbox/fields.py +++ b/djangotoolbox/fields.py @@ -26,6 +26,17 @@ def __init__(self, field, value): setattr(self, field.attname, value) +class RawFakeField(object): + primary_key = False + + def __init__(self, name): + self.name = name + self.column = name + + def get_internal_type(self): + return 'RawField' + + class RawField(models.Field): """ Generic field to store anything your database backend allows you From 4b9c4c0b53ad6f295c7c241d23bb2a1ae5a8b547 Mon Sep 17 00:00:00 2001 From: "Rinat R. Akhtamov" Date: Thu, 10 Jul 2014 16:03:14 +0600 Subject: [PATCH 2/2] #52. Add losted import. --- djangotoolbox/db/basecompiler.py | 1 + 1 file changed, 1 insertion(+) diff --git a/djangotoolbox/db/basecompiler.py b/djangotoolbox/db/basecompiler.py index 9bc166c..a93248f 100644 --- a/djangotoolbox/db/basecompiler.py +++ b/djangotoolbox/db/basecompiler.py @@ -11,6 +11,7 @@ from django.db.utils import DatabaseError, IntegrityError from django.utils.tree import Node from django.db import connections +from ..fields import RawFakeField try: from django.db.models.sql.where import SubqueryConstraint