django - 返回模型常见查询的最 Django 式方式

标签 django django-models orm

我的模型是:

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/

相关文章:

Django reversion 不保存在 shell 中所做的修订

python - Django:无法在指定中间模型的 ManyToManyField 上设置值

java - Hibernate:只需保存一个带有@EmbeddedId 的实体作为主键

java - 带部分键的 Hibernate 查询

python - 将 Django FileField 的内容上传到远程服务器

java - JPA 实体中的预加载/加载后更新

javascript - 在项目之间同步内部 JavaScript 代码的好方法是什么?

python - 从 Django 运行 Selenium 超时错误

django - 如何使用 Django Web 应用程序实现 FirebaseDB

python - 如何使用 Python/Django 在电子邮件中发送内联图像?