Форум сайта python.su
Добрый день! Я только начинаю работать с джанго и хочу для прояснить некоторые моменты..
сначала немного предыстории..
в одном действующем проекте интернет магазина разработчики забыли прописать сигналы в модели, в итоге при удалении товаров - удалялись только записи в базе, а изображения оставались в файловой системе..
за несколько лет работы сайта - сервак естественно засрался.. появилась необходимость найти файлы которые отсутствуют в базе.. но в приложении магазина описано 7 моделей (7 таблиц в базе), и каждая содержит одно или пару полей ImageField.
Вот было бы здорово если бы все файлы проекта хранились бы в таблице описанной модели Fileles..
в все другие приложения бы просто содержали id записи в этой таблице..
Насколько это правильно? и как можно использовать одну таблицу несколькими приложениями, не будет ли конфликтов?
сама таблица могла бы выглядеть так
id | app | model | src | file_type
Офлайн
wedocaА вы в БД глядели, видели как джанга называет таблицы в БД? Откуда конфликтам то взяться.
как можно использовать одну таблицу несколькими приложениями
Офлайн
по умолчанию название таблицы будет содержать название приложение в котором оно описано
в данном случае будет что то вроде myapp_images
Но в модели можно явно задать название таблицы
class Images(models.Model): app = models.CharField(max_length=20) model = models.CharField(max_length=50) src = models.ImageField( u'Изображение', upload_to=image_path, blank=True, max_length=250, ) class Meta: db_table = 'images'
Офлайн
в конечном итоге хотелось бы получить одну таблицу которую могут юзать другие приложения..
Например есть новости и статьи…
#news/models.py class New(models.Model): name = models.CharField() image = models.OneToOneField(myapp.Images) .... #article/models.py class Article name = models.CharField() image = models.OneToOneField(myapp.Images) ....
Офлайн
wedocaИ что тогда должно произойти в “нормальном” по вашему случае?
тогда, если такая же запись будет описана в другом приложении - возникнет конфликт при попытке миграции
Офлайн