Невозможно сохранить BlobFields при использовании django_gcp и django-reverse-admin
Я пытаюсь использовать как django-gcp
для хранения больших изображений в виде BlobField
, так и django-reverse-admin
, чтобы я мог редактировать все свои данные в строке. Мои модели выглядят следующим образом:
class SceneContent(models.Model):
site_title = RichCharField(
max_length=25, verbose_name="Site Title (25 char)", null=True
)
site_description = RichTextField(
max_length=300,
verbose_name="Site Description (300 char)",
null=True,
validators=[MaxLengthValidator(300)],
)
site_image = BlobField(
# blank=True,
verbose_name="Site Image (3840 x 2160 px)",
get_destination_path=get_destination_path_image,
store_key="media",
null=True,
validators=[BlobImageExtensionValidator()],
overwrite_mode="update",
)
object_title_1 = RichCharField(
max_length=25, verbose_name="Object Title 1 (25 char)", null=True
)
object_description_1 = RichTextField(
max_length=300,
verbose_name="Object Description 1 (300 char)",
null=True,
)
object_image_1 = BlobField(
# blank=True,
verbose_name="Object Image 1 (3840 x 2160 px)",
get_destination_path=get_destination_path_image,
store_key="media",
null=True,
validators=[BlobImageExtensionValidator()],
overwrite_mode="update",
)
object_title_2 = RichCharField(
max_length=25, verbose_name="Object Title 2 (25 char)", null=True
)
object_description_2 = RichTextField(
max_length=300,
verbose_name="Object Description 2 (300 char)",
null=True,
)
object_image_2 = BlobField(
# blank=True,
verbose_name="Object Image 2 (3840 x 2160 px)",
get_destination_path=get_destination_path_image,
store_key="media",
null=True,
validators=[BlobImageExtensionValidator()],
overwrite_mode="update",
)
def __str__(self):
return self.site_title
class Site(models.Model):
scene_title = RichCharField(
max_length=12, verbose_name="Title (12 char)", null=True
)
pronunciation_guide = RichCharField(
max_length=25, verbose_name="Site Pronunciation Guide (25 char)", null=True
)
scene_subtitle = RichCharField(
max_length=40, verbose_name="Subtitle (40 char)", null=True
)
scene_selection_image = BlobField(
# blank=True,
verbose_name="Background Image (1280 x 2160 px)",
get_destination_path=get_destination_path_image,
store_key="media",
null=True,
validators=[BlobImageExtensionValidator()],
overwrite_mode="update",
)
scene_content = models.OneToOneField(
SceneContent, on_delete=models.CASCADE, related_name="scene_content", null=True
)
def __str__(self):
return self.scene_title
class Meta:
verbose_name = "Site"
И я использую django-reverse-admin
, чтобы при создании Site
в интерфейсе администратора, я создавал SceneContent
в линию.
Однако когда я сохраняю модель в интерфейсе администратора, я получаю MissingBlobError
. Похоже, что когда django-gcp
переходит в copy_blob
, блоб больше не доступен в своем временном местоположении. Я предполагаю, что django-reverse-admin
приводит к тому, что порядок сохранения отношений OneToOne
и родительской модели отличается от ожидаемого django-gcp
(или родительская модель сохраняется/проверяется несколько раз), что и вызывает проблему.
Я заметил, что родительская модель (Site
) не имеет проблем с сохранением своей BlobField
, а я получаю ошибки ТОЛЬКО при сохранении BlobField
полей в моей OneToOne
модели.
Ниже приведена ошибка:
Моей первой мыслью было изменить порядок сохранения; я обновил wsgi.py
, включив в него:
Но это не решило проблему, а привело к тому, что при создании родительской модели я получал MissingBlobErrors
, а затем модель OneToOne
сохранялась правильно.
Что еще я могу попробовать, чтобы решить эту проблему?