Следующий код делает ModelAdmin
за MyDataObject
, При добавлении MyDataObject
форма редактирования пуста, потому что many_many
отношения можно увидеть только после сохранения.
class TestAdmin extends ModelAdmin {
static $managed_models = array('MyDataObject');
static $url_segment = 'testadmin';
static $menu_title = 'TestAdmin';
}
class MyDataObject extends DataObject {
private static $many_many= array('MyOtherDataObjects' => 'MyOtherDataObject');
}
class MyOtherDataObject extends DataObject {
private static $db = array('Name' => 'Varchar(255)');
private static $belongs_many_many = array('MyDataObjects' => 'MyDataObject');
}
Есть ли способ иметь many_many
отношения существуют сразу?
Если нет, то есть ли способ создать объект, а затем удалить его, если отношения не сохранены?
Если я правильно понял, ваш Пакет может иметь много фильтров, и один Фильтр может использоваться другим Пакетом. Тогда у вас есть много-много отношений между Package и Filter. Список продуктов является динамическим, вы можете рассчитать его каждый раз.
Ваши пользователи должны как-то ссылаться на Пакет, поэтому у него должно быть свойство Name, и у вас есть хотя бы одно поле ввода для добавления нового Пакета (а не пустой экран, как у вас сейчас).
Обновить
Описанное вами поведение является правильным и ожидаемым. ManyManyList
Состояние синхронизируется с базой данных, поэтому вы не можете хранить элементы только в памяти, пока не решите сохранить список в БД из коробки.
Вы могли бы заменить Add New
Кнопка с вашей собственной реализацией для автоматического создания нового объекта, сохранения его в БД и перенаправления на экран редактирования.
Других решений пока нет …