Невозможно сохранить 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 сохранялась правильно.

Что еще я могу попробовать, чтобы решить эту проблему?

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