Usar modelos fuera de una vista
Frecuentes
Visto 214 veces
0
Para enviar correos electrónicos y otras cosas, uso código fuera del archivo views.py (demasiado código allí). Creé un archivo llamado "tools.py" en la carpeta de la aplicación donde empiezo
from django.shortcuts import render_to_response
from django.core.mail import send_mail
from mysite.myapp.models import MyModel
Con runserver, tengo un error ImportError: cannot import name MyModel
Esto es extraño ya que uso la misma importación en el archivo views.py y no hay problema...
Alguna idea ? Gracias
2 Respuestas
1
Lo más probable es que tenga una importación circular. ¿Estás importando este archivo tools.py en tu myapp/models.py?
respondido 09 mar '12, 15:03
0
Un par de cosas:
- Asegúrate de tener tu init.py en la carpeta donde se encuentra su archivo "tools.py", esta es una razón común por la que es posible que no se encuentre algo.
Estoy trabajando en la configuración de algo que requiere algo muy similar a sus requisitos.
Si está tratando de tener esto como un proceso de encendido/apagado, por ejemplo, cronjob, trabajador, etc. Haga lo siguiente.
#!/usr/bin/env python
#########################################################################
# Required DO NOT REMOVE
#########################################################################
import os
import sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "appname.settings")
#########################################################################
# Import My Models, or Run an Include to Handle Processing.
from app.models.model import *
# Do Stuff to Test ( I suggest a simple insert into the model or pull and return content )
Guarde este archivo en la misma carpeta en la que está guardado su "manage.py", puede llamarlo directamente y debería procesarse, puede configurar un cronjob para que se ejecute, etc. Esto le permite tener un poco menos de código como no ejecuta algunos de los procesos que ejecuta django antes de generar una vista desde el archivo urls.py.
Si esto no está claro, siéntase libre de comentar y editaré con corrección o más detalles.
Todo lo mejor
Respondido 07 Feb 14, 13:02
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas django import or haz tu propia pregunta.
Sí. Uso una función definida en herramientas en un modelo, supongo que no debería haberlo hecho. - Martín Trigaux
Generalmente, las importaciones circulares indican un defecto de diseño. Si las herramientas necesitan modelos y los modelos necesitan herramientas, entonces realmente debería ser parte del mismo módulo. Entonces, sí, probablemente debería mover elementos relevantes a myapp/models.py. - Chris Pratt