我有以下模型
class Artist(models.Model):
name = models.CharField(max_length=200, unique=True)
photo = models.CharField(max_length=250)
views = models.IntegerField()
class Meta:
verbose_name = "artist"
ordering = ['-views']
def __unicode__(self):
return self.name
class Song(models.Model):
artist = models.ForeignKey("Artist")
name = models.CharField(max_length=250)
lyrics = models.TextField(max_length=255)
path = models.CharField(max_length=200)
views = models.IntegerField()
date = models.DateField()
class Meta:
verbose_name = "song"
ordering = ['-views']
def __unicode__(self):
return self.name
并希望获得与该关键字匹配的所有行。我可以用sql做这件事,然后返回我想要的结果。下面是sql语句;
SELECT song.name, song.path FROM song JOIN artist on song.artist_id = artist.id WHERE artist.name LIKE %keyword% || song.name LIKE %keyword% || song.lyrics LIKE %keyword%
但不知道如何在django中做到这一点。我应该使用自定义sql吗?你们有更好的主意吗?
提前感谢
发布于 2009-08-16 10:20:24
matching_songs = Song.objects.filter(Q(name__contains=keyword) | Q(lyrics__contains=keyword) | Q(artist__name__contains=keyword))
有关更多详细信息,请参阅Q对象上的Django docs
发布于 2009-08-18 06:22:08
经过两个小时的挖掘,我问自己为什么没有得到预期的结果,我意识到__contains
区分大小写,而__icontains
不区分大小写。
例如,如果我们在数据库中有一个名为"Torres“的人,并将"torres”提供给__contains
,那么它将不会返回任何内容,而__icontains
将返回"Torres“。
https://stackoverflow.com/questions/1283945
复制相似问题