对于博客文章,我使用了many_to_many提出的标签现在,我尝试将Django_Taggit用于标记字段,但是在迁移时遇到一些错误

问题描述

旧MODELS.py

在many_to_many字段中使用标签

class Tag(models.Model):
    tag_name = models.CharField(max_length=64,unique=True)
    tag_slug = models.SlugField(max_length=64,unique=True)
    created_on = models.DateTimeField(auto_Now_add=True)
    created_by = models.ForeignKey(User,null=True,on_delete=models.SET_NULL)

    def __str__(self):
        return self.tag_name

    def get_absolute_url(self):
        return reverse("news:tag-detail",kwargs={"slug": str(self.tag_slug)})


class News(models.Model):
    title = models.CharField(max_length=192,unique=True)
    slug = models.SlugField(max_length=192,unique=True)
    cover_photo = models.ImageField(upload_to='news',blank=True,null=True)
    summary = models.CharField(max_length=280)
    author = models.ForeignKey(User,on_delete=models.CASCADE,related_name='post_author')
    updated_on = models.DateTimeField(auto_Now=True)
    content = models.TextField()
    created_on = models.DateTimeField(auto_Now_add=True)
    status = models.IntegerField(choices=STATUS,default=1)
    # tags = models.ManyToManyField(Tag,related_name='post_tag')

    class Meta:
        ordering = ['-created_on']

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("news:post",kwargs={"slug": str(self.slug)})

当前模型。py

安装Django_Taggit后

删除标签模型并重写标签

class News(models.Model):
    title = models.CharField(max_length=192,default=1)

    tags = TaggableManager()

    class Meta:
        ordering = ['-created_on']

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("news:post",kwargs={"slug": str(self.slug)})

我也从view.py和urls路径中删除标签并更新html

但是当我尝试“ python manage.py migration”时,我会遇到此错误

ValueError:无法将字段news.News.tags更改为news.News.tags-它们是不兼容的类型(您不能在M2M字段之间来回更改,也不能通过添加删除 =在M2M字段上)

解决方法

首先删除标签字段和(makemigrations->migrate),然后由于不再将标签作为字段添加新的taggit字段,然后再次添加(makemigrations->migrate)。

如果要保存当前标签,我可以考虑几个选项。

  1. 创建一个新字段,例如tags_taggit,然后运行脚本将当前标签转换为新的tags_taggit字段。然后继续执行我首先告诉您的步骤
  2. 创建灯具,然后运行脚本以遍历灯具并将标签保存到新字段中。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...