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