Django: просмотр / медиа / папка из формы ImageField - PullRequest
0 голосов
/ 15 марта 2019

Моя форма ссылается на модель Django с полем изображения, в котором сохраняется URL-адрес изображения, указывающий на папку / media /.

По умолчанию форма генерирует фрагмент изображения, где "Обзор ..."отображается кнопка, как на рисунке ниже.

enter image description here

Когда я нажимаю кнопку «Обзор», я получаю диалоговое окно загрузки файла, указывающее на мой рабочий стол.

Мой вопрос: Как мне заставить этот диалог указывать на мою / медиа / папку?

  • То, чего я в конечном итоге пытаюсь добиться, - это возможность выбирать среди уже загруженных изображений в папке / media /.Если приведенная выше идея слишком надумана, что может быть предложено в качестве альтернативы в качестве основного решения проблемы?

Я пытался изменить класс ClearableFileInput(FileInput), но мне не хватает необходимого уровня навыков, чтобы бытьУспешно, и у некоторых есть предчувствие, это может быть лучше.

Отлично для некоторой помощи.

models.py

class Product(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    reference_date = models.DateTimeField(auto_now_add=True)
    product_image = models.ImageField(default='product_image/default.jpg', upload_to='product_image')

Iиспользуйте Cripsy формы, помощник формы для генерации формы.

forms.py

class ProductForm(ProductModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()

        Image = 'product_image'

        self.fields[Image].label = 'Product Image'

        self.helper.layout = Layout(
            Field(Image),
            )

settings.py

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

urls.py

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

1 Ответ

1 голос
/ 15 марта 2019

Вам нужно два поля в вашей форме:

  • Одно для загрузки нового изображения (что у вас есть сейчас)
  • и одно для выбора изображения из списка изображений.Вторым может быть ChoiceField или ModelChoiceField с пользовательским виджетом, который вы создаете для отображения всех вариантов (изображений), и пользовательским javascript для сопоставления выбранных изображений с входным значением поля ввода.

Проблема в том, что ваша модель Product не позволяет вам обмениваться изображениями между продуктами.Таким образом, либо вы должны скопировать изображение перед сохранением продукта, либо вам нужно переключиться на изображение в его собственной модели и ForeignKey на вашем Product.

...