如何在Django中为两个模型创建内容标签系统?
编辑了我的问题以使其更清楚。我很抱歉,如果我问的是显而易见的或者很容易解决的问题,我只是刚刚开始 您好,我正在开发一个网站,其中有两个模型的内容:文章和漫画。现在我想要一个系统,允许我用特定的关键字标记文章和漫画。然后可以使用这些关键字从两个模型中检索对象列表并显示它们 首先,我将系统设置如下:如何在Django中为两个模型创建内容标签系统?,django,django-models,Django,Django Models,编辑了我的问题以使其更清楚。我很抱歉,如果我问的是显而易见的或者很容易解决的问题,我只是刚刚开始 您好,我正在开发一个网站,其中有两个模型的内容:文章和漫画。现在我想要一个系统,允许我用特定的关键字标记文章和漫画。然后可以使用这些关键字从两个模型中检索对象列表并显示它们 首先,我将系统设置如下: class Article(models.Model): ..... class Comic(models.Model): ..... class Tag(models.Model):
class Article(models.Model):
.....
class Comic(models.Model):
.....
class Tag(models.Model):
tag = models.CharField(max_length = 25)
article = models.ForeignKey(Article)
comic = models.ForeignKey(Comic)
然而,这并没有奏效
然后,我尝试用以下方式为两种不同的模型实现两种不同的标记模型:ArticleTag和ComicTag:
class Article(models.Model):
.....
class ArticleTag(models.Model):
tag = models.CharField(max_length = 25)
article = models.ForeignKey(Article)
class Comic(models.Model):
.....
class ComicTag(models.Model):
tag = models.CharField(max_length = 25)
comic = models.ForeignKey(Comic)
这也不起作用,因为我能够获得文章的标签列表,但是我无法获得具有相同标签的文章列表。而且它使用了两种不同的标签模型,所以这也不是最好的
一位用户根据我之前提供的信息建议了一个ManyToManyField。然而,这究竟是如何工作的呢
现在,使用Django创建内容标签系统的最佳方法是什么?它最好只适用于3个模型:文章、漫画和标签,而不是我尝试的4个。总之,我想要一个系统,它允许我使用一个标记从两个模型中获取对象列表。所以,我非常感谢任何形式的帮助,因为我是一个业余编程爱好者(很明显),我完全被这个问题难住了。你可以使用一个
基本上如下所示。如果将ArticleTag.tag
的名称更改为ArticleTag.name
,则更直观。我还向M2M关系添加了一个相关的\u name
字段,这样您就可以使用article.objects.filter(tags\uu name=“tag\u name\u here”)
根据文章的标记检索文章。相反,您可以使用ArticleTag.objects.filter(article\uu title=“article\u name\u here”)
获取文章的所有标记
[根据更新的问题进行编辑]
根据您的更新,您可以执行以下操作:
class Article(models.Model):
.....
class Comic(models.Model):
.....
class Tag(models.Model):
tag = models.CharField(max_length = 25)
articles = models.ManyToManyField(
Article,
related_name="tags",
blank=True,
null=True
)
comics = models.ManyToManyField(
Comic,
related_name="tags",
blank=True,
null=True
)
这样,一篇文章
/漫画
可以有许多不同的标签,任何一个标签都可以标记许多不同的文章/漫画。blank=True
,null=True
意味着您不必拥有与给定标记关联的漫画/文章,也就是说,一个标记可以只标记漫画而不标记文章
要获取具有相同标记的文章列表,请执行以下操作:
Article.objects.filter(tags__name="your_tag_name")
等等,请问Article.objects.filter(tags\uu name='tag\u name\u here')是否能给我一份带有该标签的文章列表?@TahmidKhanNafee你说得对-更新了我的答案,谢谢!哦,现在它是有意义的,无论如何,我用更多的信息更新了这个问题,因为上一个问题相当平淡。不过,谢谢您的回答。@TahmidKhanNafee已更新-仅供参考,如果您的编辑使其变得如此不同,通常您应该发布一个新问题-您将因此获得更多流量。希望这有帮助!哦,该死,我以为这是违反规定的。哦,再次感谢你更新的答案,我会尝试一下。
Article.objects.filter(tags__name="your_tag_name")