Утилиты в моделях: приемлемо или нет?
Посмотрите на статический метод 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)
Но, пожалуйста, имейте в виду, что однажды мне пришлось выбросить почти готовый проект и переписать его с нуля. Просто потому, что на каком-то позднем этапе возник круговой импорт, и я не смог с ним справиться.
Подскажите, пожалуйста, приемлемо ли это или полный мусор? Как правильно организовать такую утилиту?