我有以下模型,并且按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
。
答案 0 :(得分:0)
要按不同模型中的字段排序,请使用与在模型关系中查询时使用的语法相同的语法,即使用双下划线,就像过滤一样。不幸的是,在您的情况下,由于“歌曲”和“项目”模型之间没有关联,因此无法通过“项目模型”中的字段进行订购。
有关更多信息,请参阅Django Docs。