我的模型是:
class DiscussionVote(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
path = models.CharField(null=False, max_length=50)
我不断发现自己在做两个常见的查询:
DiscussionVote.objects.filter(path=request.path, user=request.user).exists()
和
DiscussionVote.objects.filter(path=request.path).count()
我是 Django 新手,不确定创建返回这两个常见查询的简单方法的最佳途径。我的想法是这样的:
DiscussionVote.objects.get_vote_count(path) // to return a number
DiscussionVote.objects.has_voted(user, path) // to return a bool
可以吗,谢谢!
最佳答案
是的@Sebastien 是正确的;您还可以使用 QuerySet(这样您就可以链接事物)并长期重用更多代码。它可能也不适合您的特定用例,但我发现随着项目的发展它会更好。这里有一些伪代码(未测试):
class DiscussionVoteQuerySet(models.QuerySet):
def by_request(self, request):
return self.filter(path=request.path)
def by_user(self, user):
return self.filter(user=user)
class DiscussionVote(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
path = models.CharField(null=False, max_length=50)
objects = DiscussionVoteQuerySet.as_manager()
然后你可以这样做:
_count = DiscussionVote.objects.by_request(request).count()
_has_voted = DiscussionVote.objects.by_request(request).by_user(user).exists()
关于django - 返回模型常见查询的最 Django 式方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33556601/