qmax
@qmax
программер

Можно ли в django объединить в модель данные из нескольких таблиц?

Модель данных представляется набором свойств, хранящихся в разных таблицах и разных базах.
Тоесть, несколько таблиц хранят одно и тоже множество объектов.

Реально ли замутить такую хиртую модель, с хитрым менеджером и хитрым кверисетом, чтобы это выглядело (для джангоадминки, как минимум) как модель, хранящаяся в одной виртуальной таблице (outer join исходных).

С другой точки зрения: модель хранится в распределённой реляционной базе данных.

Воспрос это скорее теоретический, но кажется интересным.

В моём конкретном приложении независимых полей всего 4 и, видимо, будет проще сделать одну мастер-таблицу для хранения всех свойств, в остальные базы распихиваь в pre/post_save, и надеяться, что данные не рассинхронизируются.
  • Вопрос задан
  • 3571 просмотр
Пригласить эксперта
Ответы на вопрос 1
syschel
@syschel
freelance/python/django/backend
Посмотрите в сторону InlineModelAdmin

Пример
from django.contrib import admin
from catalog.models import Item, ItemPhoto, ItemParams
class ItemPhotoInline(admin.TabularInline):
    model = ItemPhoto
    extra = 1

class ItemParamsInline(admin.TabularInline):
    model = ItemParams
    extra = 1

class ItemAdmin(admin.ModelAdmin):
    list_display = ('name', 'price', 'oldprice', 'show', 'available', 'sort', 'create', 'update')
    list_display_links = ('name', 'price')
    list_filter = ('show', 'available', 'offer')
    search_fields = ['name']
    list_editable = ("sort",)
    fieldsets = (
        (u"Настройки", {'fields': ('category', 'offer', 'show', 'sort', 'ref_url')}),
        (u"Общее", {'fields': ('name', 'url', 'title', 'vendor', 'picture', 'thumbnail', 'price', 'oldprice', 'text', 'subtext')}),
        (u"XML", {'fields': ('xml_id', 'xml_original_id', 'xml_category_id')}),
    )
    inlines = [ItemPhotoInline, ItemParamsInline]

admin.site.register(Item, ItemAdmin)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы