2012-12-01 3 views
0

Я проектирую сайт, используя django. Идея веб-сайта состоит в том, чтобы фотографы и каждый фотограф имели альбом или больше альбомов, и каждый альбом имел бы одну или несколько фотографий/фотографий. В настоящее время у меня есть:база данных django

class Photo(models.Model): 
    name=models.ForeignKey('Album') 
    p=models.ImageField() 
    def __unicode__(self): 
     return self.name 
class Album(models.Model): 
    name=models.ForeignKey('Photographer') 
    def __unicode__(self): 
     return self.name 
class Photographer(models.Model): 
    name=models.ForeignKey('User') 
    def __unicode__(self): 
     return self.name 

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

Спасибо заранее, Абдул

+0

Э-э ... Я позволил бы обработчику хранения справиться с этим для меня ... –

+0

Что вы имеете в виду? – abdul

ответ

2

Используйте поле изображения, чтобы хранить все фотографии в одном месте и даже лучше хранить их в облачных хранилищах. А что касается отношения, то в Photo Photo, относящемся к альбому и фотографу, есть ForeignKeys. Затем используйте обратную связь, чтобы узнать фотографии каждого альбома или фотографа.

Ваш код может выглядеть this`

class Photo(models.Model): 
image = ImageField(upload_to="whereever you want to") 
album = ForeignKey(Album) 
photographer=ForeignKey(Photographer) 

и после того, как вы получите конкретный альбом, который вы можете использовать Album.set_all и photographer.set_all, чтобы получить все фотографии конкретного альбома или фотографа

`

1

Да, хранить фотографии непосредственно в файловой системе, а не базы данных. Это обычная практика, которая имеет смысл по многим причинам, главным образом связанным с производительностью.

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

+0

Но знаете ли какие-либо рамки, которые обрабатывают это? – abdul

+0

«ImageField» Django обрабатывает это из коробки ... Взгляните на мой ответ. – miki725

+0

Может ли он обрабатывать не латинский язык позже и конфликтовать? – abdul

1

Нет необходимости создавать каталоги для фотографа или альбома. Для этого нужны базы данных. У вас может быть одна гигантская папка (указанная в upload_to), в которой будут размещены все загруженные изображения для всех фотографов и альбомов, а затем для дБ, чтобы отслеживать, какие фотографии принадлежат тому фотографу/альбому.

Кстати следует указать upload_to параметр для ImageField:

models.ImageField(upload_to='images/') 

Если вы действительно хотите создать папки для каждого альбома, вы можете передать функцию upload_to параметра и добавить любую логику вы хотите там .. подробнее об этом в документах here.

Смежные вопросы