Ответы пользователя по тегу EAV
  • Как переопределить возможные значения ManyToManyField в InlineModelAdmin с учётом значения другого поля инлайн-формы?

    Поле filter не является редактируемым. Я думаю, что вам нужно получать доступ не к полю, а к объекту модели VariantAttribute. Верно?

    Если так, то вам должен подойти вот этот вариант: https://stackoverflow.com/a/22003809/1245471 - здесь предлагают создать отдельный класс для формы и провести фильтрацию в нём, а потом задать этот класс для VariantAttributeInline (атрибут form, если мне не изменяет память).
    Ответ написан
  • Как реализовать фильтры товаров django?

    Посмотрите на django-hstore (при условии, что вы можете использовать PostgreSQL). Это поле, в котором можно хранить произвольное число пар ключ - значение. Таким образом, общие для всех видов товаров поля вы храните как обычные поля модели, а меняющиеся поля пакуете в hstore. По этим запакованным полям можно даже делать поиск, за счёт того, что HStore - это родной для PostgreSQL тип данных.

    Ещё вы можете использовать тип JSON, тоже специфический для PostgreSQL. Отличается от hstore тем, что структура поля может быть древовидной и значения - типизированными (собственно, что и предполагает JSON). Пакетов, которые поддерживают это поле в Django, существует несколько, можно погуглить.

    Также вариантом является упомянутый EAV, но лично мне очень не нравится этот подход. Отсутствие контроля типов, крайне низкая скорость на больших объёмах и общая уродливость решения. SQL-база данных создана не для того, чтоб её как key-value использовать. Лучше уж немного расширить её возможности костылями типа hstore.
    Ответ написан
    2 комментария