У меня есть модель ( Patch ), в которой есть поле автора, и мне нужно сгенерировать несколько отчетов, всегда отфильтровывая строки, автор которых не содержит строку '@ example.com'.Учитывая, что Patch определен в отдельном приложении django, которое я не хочу менять, моя идея заключалась в создании представления БД (скажем, ExampleComPatch , доступ к которому осуществляется с помощью класса неуправляемой модели), которое фильтруетвычеркните все строки, которые мне не интересны, а затем поместите методы отчетности в этот новый класс модели.
Чтобы избежать дублирования кода, я сделал свой новый класс модели наследуемым от Patch.Это прекрасно работает только с несколькими оговорками:
- В моем представлении должны быть определены все столбцы в Patch, а также дополнительный 'patch_ptr_id', так как django считает, что я хочу реального наследования в БД
- Поскольку это неуправляемый класс модели, тесты, использующие это представление, должны создавать его вручную
Однако, поскольку django считает, что я хочу реального наследования, всякий раз, когда я удаляю экземплярPatch, в конечном итоге он проходит через все свои подобъекты (например, строки в ExampleComPatch, которые ссылаются на него), что означает, что тестам, которые не имеют никакого отношения к ExampleComPatch, теперь может понадобиться создать представление БД вручную, если им нужно удалить ()строка из таблицы исправлений.
Я думаю, что наследование может быть не лучшим вариантом здесь, но я бы очень хотел избежать дублирования кода, поэтому мне интересно, есть ли способ скопировать все поляопределения из Patch в ExampleComPatch.Или, может быть, даже совершенно другой подход, который позволил бы мне использовать представление БД (чтобы уменьшить сложность моих методов отчетности) с методами отчетности, определенными вне Patch, поскольку они не имеют особого смысла.