【问题标题】:How to get an object with a similar tag using django如何使用 django 获取具有相似标签的对象
【发布时间】:2018-08-18 13:34:24
【问题描述】:

我有一个可以在 django 中有多个标签的对象(一篇博文)。我正在尝试使用这些相同标签中的一个或多个获取相关对象。

例如:您的博文带有一些标签,例如“食物”、“饮料”和“餐厅”。当您打开此博文时,会显示一些“相关”博文(意味着它们共享一个或多个标签)。此类相关博文的示例将具有以下标签:“苏打水”、“柠檬水”和“饮料”。

这是我的看法:

instance = get_object_or_404(Blog, id=id)
tags = instance.tags.values()
related = []
for x in tags: #to put all the tags in an array
    related.append(x['name']) 
for a in Blog.objects.raw('SELECT * FROM "blog_table" WHERE related in "blog_table"."tags"'):
    print (a.name) #this should display the name of all the related blogposts (probably including itself)

这是我的模型:

class Tag(models.Model):

name = models.CharField(max_length=500)
number = models.IntegerField(null=True, blank=True)

def __str__(self):
    return str(self.number) + ' ' + self.name



class Blog(models.Model):

name = models.CharField(null=False, max_length=500, verbose_name='title of blogpost', unique=True)
body = models.TextField(null=False, verbose_name='body of the blogpost')
tags = models.ManyToManyField(Tag, blank=True, null=True)

def __str__(self):
    return self.name

【问题讨论】:

    标签: sql django tags


    【解决方案1】:

    要获取具有相似实例标签的博客,您可以这样做:

    tags = instance.tag.all()
    for tag in tags:
        print(Blog.objects.filter(tags=tag))
    

    【讨论】:

    • 在做Blog.objects.filter(tags=tag)时,你不是假设一个博客只有一个标签吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多