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

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

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

сама таблица могла бы выглядеть так
id | app | model | src | file_type
FishHook
wedoca
как можно использовать одну таблицу несколькими приложениями
А вы в БД глядели, видели как джанга называет таблицы в БД? Откуда конфликтам то взяться.
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'

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

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

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

#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
FishHook
wedoca
тогда, если такая же запись будет описана в другом приложении - возникнет конфликт при попытке миграции
И что тогда должно произойти в “нормальном” по вашему случае?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB