Утилиты в моделях: приемлемо или нет?

Посмотрите на статический метод get_raster_image. Конечно, это утилита.

class RasterImage(models.Model):
    raster_original = models.ImageField(upload_to=omnibus.utils.model_utils.UploadManager.get_upload_to,
                                        verbose_name=images_general.OriginalsFileNames.RASTER_ORIGINAL.value,
                                        validators=[
                                            images.validators.RasterImageValidator.
                                        validate_file_name_according_to_pattern,
                                            images.validators.FileValidator.
                                        validate_if_file_name_already_occupied,
                                        ]
                                        )


    @staticmethod
    def get_raster_image(an_id: str) -> RasterImage:

        result = RasterImage.objects.get(pk=an_id)

        return result

Чтобы избежать импорта, я обычно использую apps.get_model().

Я избегаю импорта как чумы. И, честно говоря, сначала я поместил get_raster_image в поддир utils. Но потом испугался: даже возможность циркулярного импорта для меня кошмар.

Сейчас, чтобы получить экземпляр RasterImage, мне придется написать:

raster_image_model = apps.get_model(app_label="images", model_name="RasterImage")
raster_image_model.get_raster_image(an_id=1)

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

Подскажите, пожалуйста, приемлемо ли это или полный мусор? Как правильно организовать такую утилиту?

Вернуться на верх