发布
社区首页 >问答首页 >django sql与like连接

django sql与like连接
EN

Stack Overflow用户
提问于 2009-08-16 10:12:54
回答 2查看 655关注 0票数 2

我有以下模型

代码语言:javascript
代码运行次数:0
复制
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语句;

代码语言:javascript
代码运行次数:0
复制
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吗?你们有更好的主意吗?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-16 10:20:24

代码语言:javascript
代码运行次数:0
复制
matching_songs = Song.objects.filter(Q(name__contains=keyword) | Q(lyrics__contains=keyword) | Q(artist__name__contains=keyword))

有关更多详细信息,请参阅Q对象上的Django docs

票数 1
EN

Stack Overflow用户

发布于 2009-08-18 06:22:08

经过两个小时的挖掘,我问自己为什么没有得到预期的结果,我意识到__contains区分大小写,而__icontains不区分大小写。

例如,如果我们在数据库中有一个名为"Torres“的人,并将"torres”提供给__contains,那么它将不会返回任何内容,而__icontains将返回"Torres“。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1283945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档