Несколько изображений на модель

Я пишу простое приложение для регистрации недвижимости в Django. Каждое свойство должно иметь переменное количество изображений. Изображения должны иметь редактируемый порядок. И мне нужно сделать администратор удобным для пользователя.

Итак, какие у меня варианты?

  • Есть ли поле ImageList, о котором я не знаю?

  • Есть ли приложение вроде django.contrib.comments, которое выполняет эту работу для меня?

  • Если я должен сам написать это, как бы я сделал приличную админку? Я представляю себе что-то многое, чем то, что предоставляет ImageField, с помощью drag'n'drop для переупорядочения. Но я полный clutz при написании admin pages = (

Ответ 1

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

  • В django.contrib нет такого приложения, но есть несколько внешних проектов, которые вы можете использовать, например. django-photologue, который даже имеет определенную поддержку для просмотра изображений в админе.

  • Админ-сайт не может быть выполнен "пользовательским доказательством", его следует использовать только доверенным пользователям. Учитывая это, способ сделать ваш админ-сайт порядочным будет определять ModelAdmin для вашего свойства, а затем встраивать фотографии (встроенная документация).

Итак, чтобы дать вам несколько быстрых черновиков, все будет выглядеть примерно так:

# models.py
class Property(models.Model):
    address = models.TextField()
    ...

class PropertyImage(models.Model):
    property = models.ForeignKey(Property, related_name='images')
    image = models.ImageField()

и

# admin.py
class PropertyImageInline(admin.TabularInline):
    model = PropertyImage
    extra = 3

class PropertyAdmin(admin.ModelAdmin):
    inlines = [ PropertyImageInline, ]

Причина использования аргумента related_name в ForeignKey заключается в том, что ваши запросы будут более читабельными, например. в этом случае вы можете сделать что-то вроде этого в своем представлении:

property = Property.objects.get(pk=1)
image_list = property.images.all()

EDIT: забыл упомянуть, затем вы можете реализовать перетаскивание в админе с помощью Simon Willison snippet Заказные строки с использованием перетаскивания с помощью jQuery UI

Ответ 2

Напишите модель изображения, у которой есть ForeignKey для вашей модели Property. Вероятно, у вас будут другие поля, принадлежащие изображению, а не к свойству.

Ответ 3

В настоящее время я делаю примерно то же самое, и я столкнулся с той же проблемой.

После некоторого времени исследования я решил использовать django-imaging. Он имеет красивую функцию Ajax, изображения могут быть загружены на ту же страницу, что и страница Insert Insert, и могут быть доступны для редактирования. Единственное, чего не хватает, это поддержка расширения без JPEG. Надеюсь, у меня будет обходное решение для этого через несколько дней.:)