Поле запроса для нескольких моделей Django - PullRequest
4 голосов
/ 26 октября 2010

Я хочу создать раздел «Что нового», в котором перечислены все изменения базы данных за последний день. Я добавил «обновленное» поле в мои модели:

class Film(models.Model):
   .
   .
   .
   updated = models.DateTimeField(auto_now=True)

class Actor(models.Model):
   .
   .
   .
   updated = models.DateTimeField(auto_now=True)

Теперь я хочу выполнить запрос по всем моим моделям, чтобы получить отсортированный по дате список самых последних изменений. Как запросить «обновленное» поле для нескольких моделей? Это самый эффективный способ достижения основной цели?

Что если бы я хотел быть более конкретным и перечислить фактическое поле, которое было изменено в каждой модели?

1 Ответ

3 голосов
/ 26 октября 2010

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

Однако вы можете рассмотреть вариант использования модели UpdatedItems, которая может выглядеть примерно так:

class ItemUpdate(m.Model):
    when = m.DateTimeField(...)
    instance = m.GenericForeignKey(...)
    field = m.CharField(...)
    old_value = m.CharField(...)
    new_value = m.CharField(...)

Затем используйте сигнал post_save для его заполнения:

form django.db.models.signals import post_save
def handle_post_save(sender, instance, *args, **kwargs):
    ItemUpdate(instance=instance, ...).save()

Не знаю, как из головы понять, какие поля обновляются ... Но я уверен, что кто-то спрашивал об этом в Google.

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