Почему конкретная модель вызывает миграцию каждый раз, когда я использую `makemigrations`? - PullRequest
2 голосов
/ 10 ноября 2019

У меня есть приложение 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, он создает бессмысленные файлы миграции, как показано ниже:

вывод makemigrations:

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, которые я не должен использовать (например, прокси)?

Как избавиться от этих «автоматических миграций»?

1 Ответ

0 голосов
/ 10 ноября 2019

Возможно, вы можете попытаться изменить определение прокси, как это было сделано в файле миграции:

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

Как вы говорите, прокси может иметь особое значение, и Django может попытаться изменить определение, чтобы избежать конфликта.

...