Несколько изображений на модель - PullRequest
65 голосов
/ 11 февраля 2009

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

Так что сказал, каковы мои варианты?

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

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

  3. Если бы мне пришлось написать это самому, как бы я сделал приличную сторону администратора? Я представляю себе нечто гораздо более приятное, чем то, что обеспечивает ImageField, с некоторым drag'n'drop для повторного заказа. Но я полный тупик при написании страниц администратора = (

Ответы [ 3 ]

111 голосов
/ 11 февраля 2009
  1. Списки переменных, также известные как отношения многие-к-одному, обычно обрабатываются путем создания отдельной модели для множества и, в этой модели, использования ForeignKey со значением «один».

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

  3. Административный сайт не может быть «проверен пользователем», его должны использовать только доверенные пользователи. Учитывая это, способ сделать ваш админ-сайт приличным - определить 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, ]

admin.site.register(Property, PropertyAdmin)

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

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

РЕДАКТИРОВАТЬ: забыл упомянуть, что вы можете затем внедрить порядок перетаскивания в администраторе, используя фрагмент Саймона Уиллисона Встраиваемые строки, используя перетаскивание с jQuery UI

5 голосов
/ 11 февраля 2009

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

3 голосов
/ 24 июня 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...