Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 21, 2015 08:31:58

wedoca
Зарегистрирован: 2015-07-23
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Одна таблица для всех файлов

Добрый день! Я только начинаю работать с джанго и хочу для прояснить некоторые моменты..
сначала немного предыстории..
в одном действующем проекте интернет магазина разработчики забыли прописать сигналы в модели, в итоге при удалении товаров - удалялись только записи в базе, а изображения оставались в файловой системе..
за несколько лет работы сайта - сервак естественно засрался.. появилась необходимость найти файлы которые отсутствуют в базе.. но в приложении магазина описано 7 моделей (7 таблиц в базе), и каждая содержит одно или пару полей ImageField.

Вот было бы здорово если бы все файлы проекта хранились бы в таблице описанной модели Fileles..
в все другие приложения бы просто содержали id записи в этой таблице..

Насколько это правильно? и как можно использовать одну таблицу несколькими приложениями, не будет ли конфликтов?

сама таблица могла бы выглядеть так
id | app | model | src | file_type

Офлайн

#2 Авг. 21, 2015 08:44:24

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Одна таблица для всех файлов

wedoca
как можно использовать одну таблицу несколькими приложениями
А вы в БД глядели, видели как джанга называет таблицы в БД? Откуда конфликтам то взяться.



Офлайн

#3 Авг. 21, 2015 13:45:27

wedoca
Зарегистрирован: 2015-07-23
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Одна таблица для всех файлов

по умолчанию название таблицы будет содержать название приложение в котором оно описано
в данном случае будет что то вроде 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'

тогда, если такая же запись будет описана в другом приложении - возникнет конфликт при попытке миграции

Допустим есть приложение “Новости”
можно ли как то это описать в models.py, возможно переопределить поля app и model чтобы в них подставлялись значение того приложение которое использует эту таблицу

Офлайн

#4 Авг. 21, 2015 13:59:22

wedoca
Зарегистрирован: 2015-07-23
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Одна таблица для всех файлов

в конечном итоге хотелось бы получить одну таблицу которую могут юзать другие приложения..

Например есть новости и статьи…

#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)
    ....


В итоге в таблице будут появляться такие записи
id | app | model | src
1 | news | New | upload/file.jpg
2 | artice | Article | upload/file2.jpg

Офлайн

#5 Авг. 21, 2015 21:30:12

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Одна таблица для всех файлов

wedoca
тогда, если такая же запись будет описана в другом приложении - возникнет конфликт при попытке миграции
И что тогда должно произойти в “нормальном” по вашему случае?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version