如何使用django

时间:2018-08-18 13:34:24

标签: sql django tags

我有一个对象(博客文章),可以在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

1 个答案:

答案 0 :(得分:0)

要获取具有相似实例标签的博客,您可以执行以下操作:

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