django:如何在ManyToManyField(通过)关联模型的字段上排序查询集
我有这些模型
class Region (models.Model):
name = models.CharField (max_length = 255, blank = False)
class Album(TimeStampAwareModel):
title = models.CharField (max_length = 255, blank = False)
digital_release_date = models.ManyToManyField( Region, through="AlbumRegionReleaseDate", related_name="release_date_albums")
published = models.BooleanField (default = False)
.
.
class AlbumRegionReleaseDate(models.Model):
album = models.ForeignKey (Album)
region = models.ForeignKey (Region)
digital_release_date = models.DateField ()
class Meta:
ordering = ('-digital_release_date')
假设我有三个地区:欧洲、南亚和北亚。
现在我想在欧洲地区获取所有“已发布”的专辑,并按“数字发行日期”排序,应该怎么做呢?
有没有人能告诉我怎么用SQL查询来实现这个?
谢谢 :)
3 个回答
0
我觉得你可以这样做:
Region.objects.get(name='Europe').album_set.filter(published=True).order_by('digital_release_date')
1
好吧,因为你在用Django的ORM,所以你可能不想直接用SQL查询来做这件事。
如果你总是想按照某种顺序来排列这些数据(默认情况下),我觉得最好的办法是在你的中间模型的Meta内部类里加一个排序属性:
class AlbumRegionReleaseDate(models.Model):
album = models.ForeignKey(Album)
region = models.ForeignKey(Region)
digital_release_date = models.DateField()
class Meta:
ordering = ('region', 'digital_release_date')
如果你只想用一个查询来实现这个,而不使用默认的排序……我还需要再想想。
5
编辑:
抱歉,我搞错了!现在这个应该可以用了。我在家试过了……
Album.objects.filter(
published=True,
albumregionreleasedate__region__name='Europe'
).order_by(
'albumregionreleasedate__digital_release_date'
)
希望这次能成功!