首先,它不是关于循环Model
引用。我可以找到很多关于那些的答案。
我正在构建一个应用程序,让您可以在设置中轻松定义提醒。因此REMINDERS
设置如下所示:
REMINDERS = [
{
'reminder_id': 'my-id',
'reminder_class': 'students.reminders.ExpiredAvailabilityEmailReminder',
},
]
在这个应用程序(reminders
)中,我为这些提醒提供了一个基类,其中包含一些默认行为。要定义提醒,我唯一要做的就是例如:
from reminders.base_reminders import ReminderEmail
from .models import Student
class ExpiredAvailabilityEmailReminder(ReminderEmail):
template_name = 'students/emails/setting_expired.html'
def get_queryset(self):
return Student.objects.filter(
is_active=True,
setting_expired__lt=datetime.date.today())
管理命令在reminder_class
中使用handle
导入此django.utils.module_loading.import_by_path
- 字符串,但此操作失败并显示:
django.core.exceptions.ImproperlyConfigured: Error importing module studenten.reminders: "No module named base_reminders"
因为它成为循环引用。 如何为我的应用程序的用户提供可子类化的基类,而不会遇到此问题?
感谢。
答案 0 :(得分:1)
此问题与Python 2中的默认导入顺序有关。如果您在students_app/reminders.py
并且from reminders.base_reminders import ReminderEmail
,则不清楚reminders
模块是指自己还是{你的应用程序,也称为提醒。要解决这个问题,你可以在Python 2.5+中使用from __future__ import absolute_import
(或者使用Python 3,这是默认值)
from __future__ import absolute_import
from reminders.base_reminders import ReminderEmail
这将确保reminders
导入使用reminders
应用而非相对reminders
模块。
另一个修补程序是一个文档,它不会鼓励人们命名他们的模块reminders
以避免这种命名冲突。