簡體   English   中英

對於博客文章,我使用了 many_to_many 提交的標簽。 現在我嘗試使用 Django_Taggit 作為標簽字段,但是在遷移時我遇到了一些錯誤

[英]For blog post i used tags by many_to_many filed. Now i try to use Django_Taggit for tag field, but i face some error while migrate

舊模型.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, blank=True, 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, 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 = 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 migrate”時,我遇到了這個錯誤

ValueError:無法將字段 news.News.tags 更改為 news.News.tags - 它們不是兼容的類型(您不能更改 M2M 字段或從 M2M 字段更改,或者通過 = 在 M2M 字段上添加或刪除)

首先刪除標簽字段和( makemigrations->migrate ),然后因為您不再將標簽作為字段添加新的 taggit 字段並再次添加( makemigrations->migrate )。

如果您想保存當前標簽,我可以想到幾個選項。

  1. 創建新字段,例如tags_taggit ,然后運行腳本將當前標簽轉換為新的tags_taggit字段。 然后繼續我先告訴你的步驟
  2. 創建燈具,然后運行腳本以迭代燈具並將標簽保存到新字段中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM