【问题标题】:Django Models not updating tables on MySqlDjango 模型不更新 MySql 上的表
【发布时间】:2021-05-26 08:21:08
【问题描述】:

我在 Django 中构建这个应用程序,如果我添加或删除了一个新字段,我在更改模型时遇到了问题。我保存,然后进行迁移和迁移。但是,更改不会反映在 MySql 或数据库表中。如果我删除数据库并从头开始做所有事情,那么我会看到更改。我做错了什么?我不相信每次更改或在 models.py 中添加内容时都必须删除整个数据库

我使用 XAMPP 7.3.27 将 Django 连接到 MySql,所有 CRUD 工作正常。每当我更改 models.py 中的结构时,就会出现此问题。

这就是我在 models.py 中的内容

from django.db import models
from django.utils import timezone
from django.urls import  reverse
# Create your models here.
class Category(models.Model):

    name = models.CharField(max_length=200,db_index=True)
    slug = models.SlugField(max_length=200,unique=True)
    
    class Meta:
        ordering = ('name',)
        verbose_name = 'category'
        verbose_name_plural = 'categories'

    def __str__(self):
        return self.name
    
    def get_absolute_url(self):
        return reverse('category_detail',args=[self.slug])


class Product(models.Model):
    category = models.ForeignKey(Category,related_name='products',on_delete=models.CASCADE)
    author = models.ForeignKey('Author',related_name='authors',on_delete=models.CASCADE)
    name = models.CharField(max_length=200, db_index=True)
    slug = models.SlugField(max_length=200, db_index=True)
    image = models.ImageField(upload_to='products/%Y/%m/%d',blank=True)
    image2 = models.ImageField(upload_to='products/%Y/%m/%d',blank=True)
    image3 = models.ImageField(upload_to='products/%Y/%m/%d',blank=True)
    publisher = models.CharField(max_length=100, db_index=True)
    release_date = models.DateTimeField(null=True)
    description = models.TextField(blank=True)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    created = models.DateTimeField(default=timezone.now)
    updated = models.DateTimeField(auto_now=True)
    
    class Meta:
        ordering = ('-created',)
        index_together = (('id', 'slug'),)
    
    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('product_detail',args=[str(self.slug)])


class Author(models.Model):
    first_name = models.CharField(max_length=200, db_index=True)
    last_name = models.CharField(max_length=200, db_index=True)
    created = models.DateTimeField(default=timezone.now)
    
    class Meta:
        ordering = ('-first_name',)
        index_together = (('id'),)
    
    def __str__(self):
        return self.first_name + " " + self.last_name 

【问题讨论】:

  • 这与您的迁移文件有关。运行makemigrations 命令后,您可以分享您的迁移文件夹详细信息吗?

标签: django


【解决方案1】:

我遇到了同样的问题,使用以下命令解决了:

>python manage.py migrate --fake <app_name> zero
>python manage.py migrate <app_name>

【讨论】:

    【解决方案2】:

    我通过删除所有迁移和临时文件解决了这个问题。然后我在 macOS Catalina 10.15.6 上将 Django 与 mysql-workbench-8.0.21 和 mysql-8.0.23 连接起来。它运行 100% 完美,完全没有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-12
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 2021-09-27
      相关资源
      最近更新 更多