Да, вам нужно добавить пользовательский FK.Не забывайте, что вам придется переносить таблицы базы данных - либо вручную, либо с помощью инструмента, подобного South .
. Одним из способов применения фильтра будет определение пользовательских менеджеров для вашегомодели, с for_user
методом, который принимает пользователя в качестве аргумента: что-то вроде:
class ForUserManager(models.Manager):
def for_user(self, user):
return self.filter(user=user)
Теперь вы можете использовать этот менеджер - с подклассами и / или с миксином по мере необходимости - на всех ваших моделях,и не забывайте использовать objects.for_user(request.user)
везде.
Это также упростит тестирование - ваш тест может запрограммировать этот метод for_user
, чтобы он где-нибудь установил флаг или счетчик в глобальной переменной, а затем протестировалон увеличился, как и ожидалось.
Изменить в ответ на комментарий Нет, как вы подозреваете, это не сработает.Дело даже не в том, что каждый обязательно получит последнего вошедшего в систему пользователя. Дело в том, что менеджеры являются атрибутами уровня класса и, как таковые, повторно используются в процессе, поэтому любой запрос, обслуживаемый этим серверным процессом, будет использовать один и тот же.