2012-01-11 2 views
1

Немного фона ...Пользовательский sql для модели Django

Я пытаюсь создать пользовательский auth backend и расширить модель пользователя. Я использую следующий как синяя печать:

blog post by Scott Barnham

По какой-то причине, ОРМ недопустимого SQL. Кажется, он хочет сделать внутреннее соединение обратно к себе, и он терпит неудачу, потому что он не может найти поле с именем user_ptr_id для соединения.

Если вы выполните поиск по этому вопросу, кажется, что я, возможно, не единственный. И на самом деле есть ссылка на это в комментарии к сообщению в блоге выше. Но я не могу это исправить.

Кажется, что я должен иметь возможность переопределять SQL, который генерируется. Это верно? Из того, что я могу сказать, похоже, что я могу сделать это с помощью специального диспетчера объектов. Верный?

Однако я не могу найти хороший пример того, что я хочу сделать. Все, что я вижу, хочет наследовать и связывать их. Это не совсем то, что я хочу сделать. Я как раз хочу сказать что-то вроде:

hey Django! на select, используйте этот оператор SQL. и т.д.

Возможно ли это? Может быть, мой «googlin» сегодня отключен, но я не могу его найти. Это заставляет меня думать, что я использую неправильные термины или что-то в этом роде.

Пожалуйста, обратите внимание: Я использую Django 1.3.1 с Python 2.6.5 и PostgreSQL 9.1

+1

Ваш лучший выбор для получения справки - показать код, с которым вы работаете (модель (ы), код, который производит ошибку, и сообщение о стенографической ошибке) – sgallen

ответ

0

Дэвид,

Да, вы можете переопределить поведение модели путем внедрения первостепенную диспетчера в объект. Я нашел отличный блог от Greg Allard по адресу A Django Model Manager for Soft Deleting Records, который проходит через мягкое удаление, чтобы установить поле deleted в True/False и показывать только объекты, которые не удалены, или все с удаленными объектами.

Имея это в виду, я бы подумал, что вы можете переопределить все методы() или filter() вашего объекта, чтобы получить то, что вы хотите. В стороне, каждый раз, когда я использовал указатель, «ptr» проявляется в имени поля, это из-за наследования класса. Например, class Animal():..., class Man(Animal): Человек расширяет или является подклассом Animal. В базе данных Man table будет иметь animal_ptr_id, который «расширяет» кортеж таблицы животных с этим идентификатором как Человек с полями ANIMAL и полями MAN JOINed.

+0

Благодарим за ответ! –

Смежные вопросы