我正在尝试创建一种关系,其中可以为博客文章分配任意数量的标签,并且标签可以与任意数量的博客文章相关联。我希望能够使用 Django 管理界面将标签分配给帖子,并将帖子分配给标签。
现在,要创建一篇博文并分配任意数量的标签,这是我的博文模型:
class Post(models.Model):
title = models.CharField(max_length=200, unique=True)
slug = models.SlugField(max_length=100, unique=True, null=True, blank=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
updated_on = models.DateTimeField(auto_now=True)
tags = models.ManyToManyField("Tags", blank=True)
content = RichTextUploadingField()
created_on = models.DateTimeField(auto_now_add=True)
以及定义标签的模型:
class Tag(models.Model):
name = models.CharField(max_length=20, unique=True)
这行得通。我可以登录到管理界面并创建一堆标签对象,然后创建一个帖子对象并为其分配任意数量的这些标签。
但是,假设我也想做相反的事情。我希望能够登录到管理界面,选择一个标签对象,然后将它与任意数量的帖子对象相关联。
我试图通过ManyToManyField在Tag模型中定义 a 来做到这一点,如下所示:
class Tag(models.Model):
name = models.CharField(max_length=20, unique=True)
posts = models.ManyToManyField("Post", blank=True, related_name="posts")
这确实在更改标签页面上显示了一个帖子列表,但我真的只希望它显示与该帖子关联的标签。并且使用管理界面,我希望能够选择其他标签来分配给该帖子。所以我然后尝试使用 a ForeignKey,但这只会让我选择一个帖子。
我知道如何ModelAdmin.change_form_template使用单独的查询覆盖默认管理员以显示分配给帖子的标签。但我不确定是否有办法在不覆盖默认模板的情况下做到这一点。
编辑:我已经修改了这个问题以澄清我想要实现的目标。我现在相信我的模型设置正确。但我(可能错误地)认为我可以将另一个字段添加到第二个模型中,以使其出现在管理界面中。