【问题标题】:Why does a particular model cause migrations every time I use `makemigrations`?为什么每次我使用 `makemigrations` 时特定模型都会导致迁移?
【发布时间】:2019-11-10 14:05:57
【问题描述】:

我有一个名为“代理”的 Django 应用程序。它的models.py 内容如下所示:

from __future__ import unicode_literals
from django.db import models


class Proxy(models.Model):
    class Meta:
        verbose_name = u"Прокси"
        verbose_name_plural = u"Прокси"

    TYPE = ((1, "http"), (2, "socks4"), (3, "socks5"))

    name = models.CharField(max_length=200, verbose_name=u'Прокси')
    label = models.CharField(max_length=200, verbose_name=u'Лейбл')
    ip = models.CharField(max_length=200, verbose_name=u"IP")
    port = models.CharField(max_length=200, verbose_name=u'Порт')
    login = models.CharField(
        max_length=200, verbose_name=u'Логин', null=True, blank=True)
    password = models.CharField(
        max_length=200, verbose_name=u'Пароль', null=True, blank=True)
    kind = models.IntegerField(
        verbose_name='Тип Прокси', default=1, choices=TYPE)
    expiration_date = models.DateTimeField(
        verbose_name="Срок окончания валидности", null=True, blank=True)

    def __str__(self):
        return self.name


class ProxyList(models.Model):
    class Meta:
        verbose_name = "Лист"
        verbose_name_plural = "Листы"

    name = models.CharField(max_length=200, verbose_name=u'Название листа')
    alias = models.SlugField(max_length=300, verbose_name=u'Адрес листа')
    proxies = models.ManyToManyField(Proxy, verbose_name=u'Прокси')

    def __str__(self):
        return self.name

我面临的问题是,每次尝试运行makemigrations时,都会创建无意义的迁移文件,如下所示:

ma​​kemigrations 输出:

Migrations for 'proxy':
  proxy/migrations/0112_auto_20191110_1658.py
    - Alter field proxies on proxylist
Migrations for 'serversettings':
  serversettings/migrations/0052_auto_20191110_1658.py
    - Alter field top50_proxy on serversettings
Migrations for 'top50':
  top50/migrations/0066_auto_20191110_1658.py
    - Alter field proxy on scriptproxy

生成的迁移文件:

# Generated by Django 2.2.1 on 2019-11-10 13:58

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('proxy', '0111_auto_20191110_1640'),
    ]

    operations = [
        migrations.AlterField(
            model_name='proxylist',
            name='proxies',
            field=models.ManyToManyField(to='proxy.Proxy', verbose_name='Прокси'),
        ),
    ]

相关模型迁移文件只是 AlterField 的,具有我在其 Proxy 关系字段中指定的相同参数。

我真的不知道是什么原因造成的。我的 django 设置文件没有提及与 proxy 应用程序相关的任何具体内容。也许这是一个我不知道的命名问题?是否有我不应该使用的 Django 应用程序名称的保留列表(例如代理)?

如何摆脱这些“自动迁移”?

【问题讨论】:

  • 所有其他迁移是否具有完全相同的内容?
  • @heemayl 相关模型在其特定情况下具有 AlterField(例如,从相关模型字段定义中复制)。每次我运行 makemigrations 时,只有 django“创建”日期注释发生变化。

标签: python django django-models


【解决方案1】:

也许您可以尝试更改代理定义,就像在迁移文件中所做的那样:

field=models.ManyToManyField(to='proxy.Proxy', verbose_name='Прокси')

正如您所说,代理可能具有特殊含义,Django 可能会尝试更改定义以避免冲突。

【讨论】:

  • 它并没有真正改变任何东西。我已经尝试过了,同样的事情发生了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 2022-07-06
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
相关资源
最近更新 更多