Я могу отслеживать историю обновлений экземпляров модели. Я не знаю, как продолжить дальше, поэтому я могу вспомнить значения экземпляров по конкретной дате/времени.экземпляры Django обновляют и возвращают значения из истории
class Room
предназначен для создания новых комнат.
class RoomLog
Используется для отслеживания изменений. Если я обновляю экземпляр комнаты, создается соответствующий экземпляр RoomLog. Это влияет на создание экземпляров RoomLog для каждого обновления экземпляра комнаты.
Итак, я могу изменить конкретный экземпляр несколько раз в пределах, например. минуту или час. Я могу сделать то же самое с другими экземплярами в одно и то же время или, например, я просто НЕ могу изменить какой-либо экземпляр или изменить некоторые другие экземпляры и не изменять их все.
Несмотря на то,
Я хотел бы вспомнить всю таблицу со всеми последними значениями экземпляров по конкретному часу/день или в течение определенного периода времени, например,
Если я выберу время 1:00, тогда таблица будет отображаться со всеми созданными вами экземплярами. Назовем его таблицей v0.
Теперь я запускаю обновления, а некоторые экземпляры меняются между 1:00 утра & 2:00. Таким образом, я хотел бы повторно вызвать таблицу, которая отображает все экземпляры для времени 2:00 утра и сохранить во времени, что некоторые экземпляры были изменены, а некоторые нет. Итак, некоторые из них имеют историю изменений, а некоторые - нет.
и то же самое для других часов/дней. Надеюсь, вы поняли, чего я хочу достичь.
Как это сделать?
Это мои две модели, которые я использую для работы с Room и соответствующими экземплярами RoomLog.
class Room(models.Model):
room_name = models.CharField(max_length= 10)
room_value = models.PositiveSmallIntegerField(default=0)
flat = models.ForeignKey(Flat)
created_date = models.DateField(auto_now_add= True)
created_time = models.TimeField(auto_now_add= True)
def __init__(self, *args, **kwargs):
super(Room, self).__init__(*args, **kwargs)
self.value_original = self.room_value
def save(self, **kwargs):
with transaction.atomic():
response = super(Room, self).save(**kwargs)
if self.value_original != self.room_value:
room_log = RoomLog()
room_log.room = self
room_log.room_value = self.value_original
room_log.save()
return response
class Meta:
ordering = ('room_name',)
def __unicode__(self):
return self.room_name
class RoomLog(models.Model):
room = models.ForeignKey(Room)
room_value = models.PositiveSmallIntegerField(default=0)
update_date = models.DateField(auto_now_add= True)
update_time = models.TimeField(auto_now_add= True)
def __str__(self):
return '%s | %s | %s' % (self.room, self.update_date, self.update_time)
EDIT
ответ ниже от djq о Gt & ЛТР указал мне в направлении решения. так я решил это на своих взглядах:
class AllRoomsView(ListView):
template_name = 'prostats/roomsdetail.html'
queryset = Room.objects.all()
def get_context_data(self, **kwargs):
context = super(AllRoomsView, self).get_context_data(**kwargs)
timenow = tz.now()
timeperiod= timedelta(hours=1)
deltastart = timenow - timeperiod
context['rooms'] = Room.objects.all()
context['rlog'] = RoomLog.objects.all()
context['rfiltered'] = RoomLog.objects.filter(update_time__gt = deltastart)
context['rfilteredcount'] = RoomLog.objects.filter(update_time__gt = deltastart).count()
print timenow
choosestart = '22:04:30.223113'
choosend = '22:54:30.223113'
context['roomfiltertest'] = RoomLog.objects.filter(update_time__gt = choosestart, update_time__lte = choosend)
return context
ноту на model - похоже, что у вас есть 'room_value', определенный дважды - вам может не понадобиться это в' RoomLog', поскольку вы уже определяете связь между двумя моделями с 'room = models.ForeignKey (Room)' – djq
Я бы предложил позвонить ему что-то другое, если оно имеет другую функцию. – djq
исправьте меня, если я ошибаюсь, но я использую room_value в RoomLog, чтобы он мог отслеживать значения, а также время обновления. Имя может вводить в заблуждение, но оно выполняет ту же функцию. Я подумаю об этом, как только выясню свою основную проблему по теме. – BlueDog