【问题标题】:Django Mysql not migrating modelsDjango Mysql 不迁移模型
【发布时间】:2020-09-10 09:34:37
【问题描述】:

我正在学习 Django,但我似乎无法迁移模型。唯一被迁移的是ID,尽管模型有namedescriptionimage等。

models.py

from django.db import models

# Create your models here.

class Destination(models.Model):
    name: models.CharField(max_length=100)
    price: models.IntegerField()
    desc: models.TextField()
    img: models.ImageField(upload_to='pics')
    special: models.BooleanField(default=False)

生成的 0001_initial.py

# Generated by Django 3.0.6 on 2020-05-23 14:00

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Destination',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
            ],
        ),
    ]

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'python',
        'USER': 'root',
        'PASSWORD': '1q2w3e4r',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

迁移输出

$ python3 manage.py sqlmigrate travel 0001
--
-- Create model Destination
--
CREATE TABLE `travel_destination` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY);

【问题讨论】:

  • 你应该写name = ,而不是name : (适用于所有字段)。

标签: python django python-3.x django-models mysql-python


【解决方案1】:

类属性用等式符号 (=) 定义,不是 用冒号 (:)。所以你编写模型:

class Destination(models.Model):
    # = instead of :
    name = models.CharField(max_length=100)
    price = models.IntegerField()
    desc = models.TextField()
    img = models.ImageField(upload_to='pics')
    special = models.BooleanField(default=False)

【讨论】:

  • 奇怪,这很有效,我正在关注 youtube 上的教程,而那个人使用的是 : not = 并且它对他很有效。视频见分钟 0:54 youtube.com/watch?v=dSbbYym79dw
  • @SalimAljayousi:什么视频。不知何故,我经常在这里看到人们在学习教程,但是大多数教程的质量似乎很差。通常这些人会引入反模式,比如request.POST or None,将related_name命名为与字段名称相同等等,然后这往往会导致多年的额外麻烦。
  • @SalimAljayousi 如果你稍微转发一下视频,你会看到他更正了语法以使用=
  • @SalimAljayousi:视频也充满了错字。例如defultmax_lenght。但事实上,正如 Niloct 所说,后来作者修复了问题youtu.be/dSbbYym79dw?t=73
【解决方案2】:

你的模型应该是这样的

class Destination(models.Model):
    name = models.CharField(max_length=100)
    price = models.IntegerField()
    desc = models.TextField()
    img = models.ImageField(upload_to='pics')
    special = models.BooleanField(default=False)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-17
    • 2021-11-29
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 2019-03-20
    • 2019-07-12
    相关资源
    最近更新 更多