Bulk Create instances using same info but different photos in django admin?

Я работаю с этой моделью Media:

class Media(AbstractCreatedUpdatedDateMixin):
    uuid = models.UUIDField(unique=True, default=uuid4, editable=False, db_index=True)
    user = models.ForeignKey(User, related_name="uploaded_media", on_delete=models.CASCADE)
    title = models.CharField(max_length=255)
    location = models.PointField()
    image = models.ImageField(upload_to=uuid_directory_path)
    category = models.CharField(max_length=9, choices=ContentType.choices())

В некоторых случаях несколько фотографий представляют одну и ту же вещь, поэтому значения user, title, location и category будут одинаковыми, и мне нужна эта функциональность на странице администратора.

Я создал виджет, позволяющий использовать несколько ImageField в форме создания:

class BulkImageWidget(widgets.MultiWidget):
    def __init__(self, attrs=None):
        _widgets = (
            widgets.FileInput(attrs=attrs),
            widgets.FileInput(attrs=attrs),
            widgets.FileInput(attrs=attrs),
            widgets.FileInput(attrs=attrs),
            widgets.FileInput(attrs=attrs),
        )
        super().__init__(_widgets, attrs)

    def decompress(self, value):
        if value:
            return [object for object in value]
        return None

    def value_from_datadict(self, data, files, name):
        return data

Это был просто тест, на самом деле, мне нужно, чтобы этот виджет загружался динамически, и не был ограничен только 5 фотографиями одновременно.

В админке я переопределил наборы форм, связанные с полем Image:

    formfield_overrides = {
        PointField: {'widget': LocationWidget, "label": _("Location (lng, lat)")},
        ImageField: {'widget': BulkImageWidget, "label": _("Images")},
    }

Затем я переопределил функцию save_model в ModelAdmin, с повышением исключения, чтобы проверить, как были структурированы данные, чтобы я мог правильно сохранить экземпляры:

class MediaAdmin(admin.ModelAmin):
    ...
    
    def save_model(self, request, obj, form, change):
        raise Exception(request)

Но он никогда не выполняет эту функцию, он бросает No file was submitted. Check the encoding type on the form. и остается на странице формы.

Итак, две проблемы, с которыми я сталкиваюсь:

  • Ошибка кодирования после размещения формы
  • Невозможно заставить виджеты загружаться динамически inline

Спасибо

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