Как передать параметры в пользовательскую модель OneToOne?

Я пытаюсь создать простую модель, в которой валидоторы и upload_toпути полей могут быть настроены на основе каждой модели. Моя текущая модель:

class SimpleThreePageModel(models.Model):
    def __init__(self, *args, screen_size=(0, 0), image_path="", **kwargs):
        super().__init__(*args, **kwargs)
        self.screen_size = screen_size
        self.image_path = image_path

    slide_title_1 = models.CharField(
        max_length=25,
        verbose_name="Page Title 1/3 (25 char)",
        null=True,
    )
    slide_body_1 = models.CharField(
        max_length=280, verbose_name="Page Body 1/3 (280 char)", null=True
    )
    slide_image_1 = models.ImageField(
        null=True,
        verbose_name="Page Image 1/3 ({} x {}} px)".format(
            self.screen_size.x, self.screen_size.y
        ),
        blank=True,
        upload_to=self.image_path,
        validators=(
            [
                validate_image_file_extension,
                MediaSizeValidator(self.screen_size.x, self.screen_size.y),
            ]
        ),
    )

    slide_title_2 = models.CharField(
        max_length=25,
        verbose_name="Page Title 2/3 (25 char)",
        null=True,
    )
    slide_body_2 = models.CharField(
        max_length=280, verbose_name="Page Body 2/3 (280 char)", null=True
    )
    slide_image_2 = models.ImageField(
        null=True,
        verbose_name="Page Image 2/3 ({} x {}} px)".format(
            self.screen_size.x, self.screen_size.y
        ),
        blank=True,
        upload_to=self.image_path,
        validators=(
            [
                validate_image_file_extension,
                MediaSizeValidator(self.screen_size.x, self.screen_size.y),
            ]
        ),
    )

    slide_title_3 = models.CharField(
        max_length=25,
        verbose_name="Page Title 3/3 (25 char)",
        null=True,
    )
    slide_body_3 = models.CharField(
        max_length=280, verbose_name="Page Body 3/3 (280 char)", null=True
    )
    slide_image_3 = models.ImageField(
        null=True,
        verbose_name="Page Image 3/3 ({} x {}} px)".format(
            self.screen_size.x, self.screen_size.y
        ),
        blank=True,
        upload_to=self.image_path,
        validators=(
            [
                validate_image_file_extension,
                MediaSizeValidator(self.screen_size.x, self.screen_size.y),
            ]
        ),
    )

Теперь я хотел бы сделать что-то вроде:

class MyModel(models.Model):
    three_page_presentation = models.OneToOneField(
        SimpleThreePageModel((3840,2160), "my_path"), on_delete=models.CASCADE, null=True
    )

Но это не представляется возможным по целому ряду причин.

  • Хочу ли я, чтобы моя ThreePagePresentation была полем, а не моделью? Будет ли он поддерживать создание такого количества подполей в моей модели?
  • Возможно ли передавать параметры в модель OneToOne, например, если я хочу передать, где я хочу хранить изображения в этой подмодели?
Вернуться на верх