【发布时间】:2019-06-17 10:27:32
【问题描述】:
我无法在使用自定义管理器还是模型方法之间做出决定。我有一个模型User 并有一个查询来查找特定用户范围内的其他用户。
所以我的两个选择是:
class UserManager(models.Manager):
def find_users_in_radius(self, user):
return super().get_queryset().filter(
location__distance_lt=(
user.location, Distance(mi=user.search_radius))).exclude(
pk=user.pk)
class User(AbstractUser):
.....
users_in_radius = UserManager()
或User 模型上的方法:
class User(AbstractUser):
.....
def users_in_search_radius(self):
return User.objects.filter(
location__distance_lt=(
self.location, Distance(mi=self.search_radius))).exclude(
pk=self.pk)
在我看来,我会使用第一种方法获得查询结果:User.users_in_radius.find_users_in_radius(request.user)
或第二种方法:request.user.users_in_search_radius()。
我更喜欢第二种选择,但我想知道这是否是不好的做法。我还没有看到任何人在模型方法中调用User.objects 的例子。是否有其他方法可以做到这一点,或者自定义管理器是更好的方法?
【问题讨论】:
-
我认为第二个选项没有任何问题。它更方便,使用
objects在模型方法中不是问题。