La migración choca con forms.py

El comando python manage.py makemigrations falla la mayor parte del tiempo debido a forms.py , en el que se hace referencia a nuevos modelos o nuevos campos a nivel de definición de clase.

Así que tengo que comentar cada una de estas definiciones para que funcione la migración. Es una tarea dolorosa.

No entiendo por qué el proceso de migración importa el módulo forms.py . Creo que importar módulos de modelos debería ser suficiente.

¿Hay alguna manera de evitar esos errores?

Gracias a @alasdair entendí mi problema y encontré una solución: reemplacé el código original en el archivo views.py

 from MyApp import forms 

con

 import sys if 'makemigrations' not in sys.argv and 'migrate' not in sys.argv: from MyApp import forms 

Funciona bien en mi caso, pero supongo que hay una mejor manera de saber si el proceso actual es una migración o no. Si es así, por favor avise.

Estaba teniendo este mismo problema y encontré el problema específico. Cuando se llamaba al comando migrate, las verificaciones del sistema de Django se abrieron camino en mis forms.py y luego fallaron cuando se encontraron con una línea de código que realizó una consulta en una tabla que se suponía que la migración debía crear. Tuve un campo de elección que creaba instancias de las elecciones con una consulta de base de datos como esta:

 university = forms.ChoiceField( choices=[('', '')] + [(university.id, university.name) for university in University.objects.all()], widget=forms.Select( attrs={ 'class': 'form-control', 'placeholder': 'University', } ), required=True ) 

La solución fue eliminar la consulta de las opciones (dejándola como [(”, ”)] y luego rellenar las opciones en el método de inicio de la clase.

 class UniversityForm(forms.Form): university = forms.ChoiceField( choices=[('', '')], widget=forms.Select( attrs={ 'class': 'form-control', 'placeholder': 'University', } ), required=True ) def __init__(self, *args, **kwargs): super(UniversityForm, self).__init__(*args, **kwargs) # Load choices here so db calls are not made during migrations. self.fields['university'].choices = [('', '')] + [(university.name, university.name) for university in University.objects.all()] 

Excluya las nuevas columnas con .only en su consulta de esta manera:

 University.objects.only('id', 'name').all() 

A continuación, ejecute su migración.

inicio vía callable …

 def get_provinces(): province_choices = [] for province in ProvinceCode.objects.filter(country_code_id=1).order_by('code'): province_choices.append((province.code, province.code)) return province_choices class MemberForm(forms.Form): provinces = forms.ChoiceField(label='Provinces', choices=get_provinces, required=True) 

Consulte aquí: error de relación Django al ejecutar make migrations