我有一个对象(博客文章),可以在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
答案 0 :(得分:0)
要获取具有相似实例标签的博客,您可以执行以下操作:
tags = instance.tag.all()
for tag in tags:
print(Blog.objects.filter(tags=tag))