LINUX.ORG.RU

Django как добавить гибкости к моделям?

 


0

1

Всем привет!

Встала такая задача: 1) в одной модели задается список необходимых полей для другой модели. Я решил это как StackedInline+ForeignKey+CharField.

2) Тот список, который был задан в шаге 1, надо как-то отобразить в инлайнах другой модели как названия к кастомным полям. Для простоты пусть всюду будет CharField.

★★
  1. Ты натягиваешь сову на глобус. Прекрати.
  2. Без кода нифига не понятно, что ты наговнокодил.
anonymous
()
Ответ на: комментарий от aido

«Не пришпошоблены мы, кролики, для лажанья».

Задача какая вообще?

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

Ладно. перефразирую: хочу создавать модели джанги в рантайме. ну или хотя бы их подобия.

Переобъясняю: Ты не хочешь этого делать. Там боль и страдания. А если хочешь помощи, то выкладывай, сцуко, что написал и объясняй конкретно, чего хочешь.

anonymous
()
Ответ на: комментарий от anonymous
# models.py
class Property(models.Model):
    class Meta:
        verbose_name        = _('Property')
        verbose_name_plural = _('Properties')
    name = models.CharField  (_('Name'), max_length=256, blank=False, default='')
    value = models.CharField (_('Value'), max_length=16, blank=False, default='')
    my_id = models.ForeignKey('MyID', on_delete=models.CASCADE, blank=False, null=False)

class ProductProperty(models.Model):
    class Meta:
        verbose_name        = _('Property')
        verbose_name_plural = _('Properties')
    name    = models.CharField  (_('Name'), max_length=256, blank=False, default='')
    product = models.ForeignKey('Product', on_delete=models.CASCADE, blank=False, null=False)

#admin.py

class ProductPropertiesInline(admin.TabularInline):
    model = ProductProperty
    extra=0

class ProductAdmin(admin.ModelAdmin):
    inlines=[ProductPropertiesInline,]
    ....

class PropertyInline(admin.TabularInline):
    model=Property
    extra=0

class MyIDAdmin(admin.ModelAdmin):
    inlines = [PropertyInline,]
    ....

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

Хочу, чтобы:

1) Модель Product имела инлайны с именами обязательных свойств для модели MyID. [Done]

2) Модель MyID отображала в инлайнах то, что было создано для соответствующего Product. MyID содержит ForeignKey на Product.

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

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

aido ★★
() автор топика
Ответ на: комментарий от aido
  • Прочитай базовый курс по реляционным базам данных. В них не просто так есть таблицы с полями.
  • В реляционных базах данных не просто так таблицы сделаны. Правильный путь менять поля в продукте - это менять столбцы в таблице, а не плодить «properties».
  • Если ты делаешь онлайн-шоп одному конкретному пользователю - он перебьётся без конфигурируемых полей. Это не простая фича. Захочет - поправит код сам или наймёт кого-то.

Для того, что ты запланировал сейчас, надо писать отдельный view для админки. Гугли django admin custom view.

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

Не стоит давать веб-серверу права на модификацию структуры БД. Надо или спроектировать базу так, чтобы всё управлялось только содержимым таблиц (да, сложно выйдет), либо сделать утилиту для управления базой, работающую не из под веб-сервера.

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

Здравый смысл? Нет, если их надо только отображать, то годится, но если надо будет организовать фильтр по ним, то это уже как-то неудобно.

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

Так БД ж тут не модифицируется при той структуре, что я написал. Осталось вставить в сам веб-сервер эту утилиту.

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

Можно (можно хоть строкой, и в ней рыться), но в рамках ORM не получится, и дороже (хотя опять же, если редко и/или объём небольшой...).

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

Клёво, а я отстал от жизни со своим старьём. Тогда с ORM порядок.

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

если надо часто рыться делай дочерниюю таблицу с колонками имя проперти и значение.

Но в 99% тебе хватит и JSON а в других случаях грех не поменять структуру БД.

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