Джанго - как реализовать блокировку данных - PullRequest
0 голосов
/ 08 марта 2012

У меня есть таблица базы данных. Некоторые элементы базы данных могут быть отредактированы пользователем, но только один пользователь может редактировать содержимое таблицы одновременно, и если через 2 часа пользователь не закончил редактирование, другие пользователи могут редактировать таблицу. Как я могу это сделать?

Таблица выглядит так:

class NodeRevision(BaseModel, NodeContent):
    node       = models.ForeignKey(Node, related_name='revisions')
    summary    = models.CharField(max_length=300)
    revision   = models.PositiveIntegerField()
    revised_at = models.DateTimeField(default=datetime.datetime.now)
    suggested  = models.BooleanField(default=False)
    suggest_status = models.CharField(max_length=16,default="")

Должен ли я добавить к нему BooleanField, например editing_locked=models.BooleanField(default=False)? Или что-то другое? И как я могу реализовать 2-часовой чек?

1 Ответ

3 голосов
/ 08 марта 2012

Вам потребуется поле времени locked_at и поле * 1002. *.

Каждый раз, когда кто-нибудь загружает страницу редактирования, обновляйте базу данных информацией locked_at и locked_by.

Чтобы реализовать ограничение на 2 часа, я бы рассчитывал результаты только тогда, когда пользователь запрашивает разрешение (в отличие от опроса / обновления моделей).Когда пользователь пытается отредактировать модель, проверьте locked_by/locked_at и верните логическое значение, независимо от того, редактируется ли он пользователем или нет.

def can_edit(self, user):
    if user == self.locked_by:
         return True
    elif self.locked_at and (self.locked_at - datetime.datetime.now()).total_seconds > 2*60*60:
         return True
    return False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...