问题描述
旧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)})
但是当我尝试“ python manage.py migration”时,我会遇到此错误
ValueError:无法将字段news.News.tags更改为news.News.tags-它们是不兼容的类型(您不能在M2M字段之间来回更改,也不能通过添加或删除 =在M2M字段上)
解决方法
首先删除标签字段和(makemigrations->migrate
),然后由于不再将标签作为字段添加新的taggit字段,然后再次添加(makemigrations->migrate
)。
如果要保存当前标签,我可以考虑几个选项。
- 创建一个新字段,例如
tags_taggit
,然后运行脚本将当前标签转换为新的tags_taggit
字段。然后继续执行我首先告诉您的步骤 - 创建灯具,然后运行脚本以遍历灯具并将标签保存到新字段中。