Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django模型如何按投票时间排序?_Python_Sql_Django_Django Models - Fatal编程技术网

Python Django模型如何按投票时间排序?

Python Django模型如何按投票时间排序?,python,sql,django,django-models,Python,Sql,Django,Django Models,所以我有三个模型,用户、帖子和用户投票: 用户是默认的django.contrib.auth用户 职位定义: class Post(models.Model): num_likes = models.IntegerField(default=0) num_dislikes = models.IntegerField(default=0) # when deleting users, we should simply set user.is_active to Fals

所以我有三个模型,用户、帖子和用户投票:

用户是默认的django.contrib.auth用户

职位定义:

class Post(models.Model):
    num_likes = models.IntegerField(default=0)
    num_dislikes = models.IntegerField(default=0)
 
    # when deleting users, we should simply set user.is_active to False,
    # that way this doesn't break
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    text = models.CharField(max_length=200, default="")

用户投票:

class Action(models.TextChoices):
    UP = 'u'
    DOWN = 'd'

class UserVotes(models.Model):
    voter = models.ForeignKey(User, on_delete=models.CASCADE)
    item = models.ForeignKey(Post, on_delete=models.CASCADE)
    type = models.CharField(max_length=2, choices=Action.choices, default=Action.UP)
    time = models.DateTimeField('time voted on', default=timezone.now)

    class Meta:
        unique_together = ('voter', 'item')
在用户的个人资料页面上,我想返回用户在投票时按降序向上投票的帖子。我有点迷路了。我可以返回用户投票的帖子,这些帖子不是他们自己的:

def get_users_liked_posts(user_id):
    Post.objects.filter(uservotes__voter__id=user_id, uservotes__type=Action.UP).exclude(user_id=user_id)
但我不确定要通过什么传递到
订单
?这类似于
-uservoces\uuuu time
,但是我如何指定我要按特定的用户id uservoces订购?我还可以检索与某个用户对应的所有用户投票并对其进行排序,但我如何将所有这些转换为帖子呢

编辑:经过一些挖掘,我找到了
select\u-related
功能:

这让我可以做到:

def get_users_liked_posts(user_id):
    # note: position of select_related in query is irrelevant
    upvotes = UserVotes.objects.filter(voter_id=user_id, type=Action.UP).exclude(item__user_id=user_id).order_by('-time').select_related('item')
    return [upvote.item for upvote in upvotes]
这是有表现的,但我觉得应该有一种内在的方式来做我想做的事情?我


EDIT2:我太笨了,我忘了我只能
.order\u by(-time)
因为我已经准备好了过滤器,哎哟

投票创建的时间是排序投票的最佳属性。在模型定义中使用“排序”权限,如下所示:

class Meta:
    unique_together = ('voter', 'item')
    ordering = ['-time']