LINUX.ORG.RU

[django] ORM, «сложные» запросы


0

1

Что-то я совершенно не понимаю как работать с этой ORM. Есть список типов объектов. Он нужен для того чтобы автоматически подбирать нужное представление вслепую, когда мы заранее не знаем что, где и как придется отображать.

class ObjectType(models.Model):
    name        = models.CharField(max_length=32)
    table_name  = models.CharField(max_length=32)
    class_name  = models.CharField(max_length=32)
    template_name = models.CharField(max_length=64, null=True, blank=True)

Таблица с объектами, которая содержит ключ к самой себе и к типу объекта, чтобы впоследствии можно было отобразить разные элементы с общим parent.

class FObject(models.Model):
    parent      = models.ForeignKey('self', null=True, blank=True, related_name='object_parent') 
    object_type = models.ForeignKey(ObjectType)    
    created     = models.DateTimeField(auto_now_add=True)
    owner       = models.ForeignKey('self', null=True, blank=True, related_name='object_owner')

Мне, по-хорошему, нужно получить объединенные таблицы, а не одну модель, отфильтрованную по полю другой. Предположим, нужно отобразить все объекты с parent=NULL. Для этого сначала нужно выбрать имена шаблонов, имена классов ( чтобы потом сделать что-то типа mysite.blog.models.__dict__[object_type.class_name] ), т.е.

ObjectType.objects.filter(fobject__parent=None)
Потом мне еще раз нужно выбрать те же самые объекты:
FObject.objects.filter(fobject__parent=None)

Хотя их можно было выбрать все сразу:

SELECT * FROM fobject JOIN objecttype ON fobject.object_type_id=objecttype.id

Как быть?

ОРМ, конечно, ущербный, но в данном конкретном случае тебе нужен select_relative.

provaton ★★★★★ ()
Ответ на: комментарий от division_hell

лучше сразу на Pyramid переходи. SQLAlchemy полностью в Django не интегрируется.

xpahos ★★★★★ ()
Ответ на: комментарий от xpahos

лучше сразу на Pyramid переходи

Pyramid монструозен,, надо переходить на flask.

anonymous ()
Ответ на: комментарий от anonymous

Pyramid монструозен,, надо переходить на flask.

Flask монстроуозен, надо переходить на CGI без всякого уг.

xpahos ★★★★★ ()
Ответ на: комментарий от division_hell

> Позже, наверное, SQLAlchemy попробую.

Попробуй, он тебя не разочарует. Но порог вхождения там гораздо выше чем у джанговского ОРМ, надо будет хорошенько почитать документацию.

provaton ★★★★★ ()

лучше сразу на Pyramid переходи

Pyramid монструозен,, надо переходить на flask.

Как быть?

Сравнить это всё с ActiveRecord и Datamapper и решить, что питон не нужен)

Alve ★★★★★ ()
Ответ на: комментарий от Alve

Сравнить это всё с ActiveRecord и Datamapper и решить, что питон не нужен)

ммм, руби перестал тормозить? :) А там JIT появился?

xpahos ★★★★★ ()
Ответ на: комментарий от xpahos

Руби давно уже не тормозит. Полный JIT никогда в руби не появится, ибо он интерпретируемый язык.

Alve ★★★★★ ()
Ответ на: комментарий от Alve

Полный JIT никогда в руби не появится, ибо он интерпретируемый язык.

что такое полный JIT? Т.е. у руби нет аналогов pypy?

xpahos ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.