Django按其他模型的值对过滤后的对象进行排序

时间:2019-08-09 10:02:55

标签: python django django-models querying

我有以下模型,并且按Item的object_id字段过滤了所有歌曲。但是然后我需要使用 Item position对它们进行排序。有什么方法可以过滤歌曲并按“项目”位置过滤吗?

class Chart(models.Model):
    title = models.CharField(max_length=120)
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, limit_choices_to=CONTENT_TYPE_LIMIT)

class Version(models.Model):
    chart = models.ForeignKey("Chart", related_name="versions", on_delete=models.CASCADE)

class Item(models.Model):
    edition = models.ForeignKey(Version, on_delete=models.CASCADE, related_name="items")
    object_id = models.UUIDField(db_index=True)
    position = models.PositiveIntegerField()

现在,我首先通过chart获得list_ids = chart.versions.last().items.all(),并获得运行Songs.objects.filter(id__in=list_ids)的歌曲,但是我也需要为此进行order_by('position')。也许我获取所有歌曲的方法是错误的。因为Items的object_id必须是Songs的ID,尽管故意不是ForeignKey

1 个答案:

答案 0 :(得分:0)

要按不同模型中的字段排序,请使用与在模型关系中查询时使用的语法相同的语法,即使用双下划线,就像过滤一样。不幸的是,在您的情况下,由于“歌曲”和“项目”模型之间没有关联,因此无法通过“项目模型”中的字段进行订购。

有关更多信息,请参阅Django Docs