0

「コア」アプリケーションからモデル「LogDBEvents」をインポートできません...これが私のプロジェクトの階層です。

1/var/www/arpaso (root of the project)
    2/core
        3/signals
            4/__init__.py
            4/log_db_event.py
        3/__init__.py
        3/models.py
    2/manage.py

他の投稿で読んだように、循環参照である可能性があります。

 File "/var/www/arpaso/core/models.py", line 2, in <module>
    from core.signals.log_db_event import save_handler, del_handler
  File "/var/www/arpaso/core/signals/log_db_event.py", line 1, in <module>
    from core.models import LogDBEvents
ImportError: cannot import name LogDBEvents

もしそうなら、それを修正する方法は?ここに私の2つのファイルがあります:

models.py:

from django.db import models
from core.signals.log_db_event import save_handler, del_handler
from django.db.models.signals import post_save, post_delete

#Q10 create model to store database events
class LogDBEvents(models.Model):
    EVENTS= (
        ('DC','Database entry created'),
        ('DD','Database entry deleted'),
        ('DE','Database entry edited'),
    )
    event_time = models.DateTimeField(auto_now_add=True)
    event_type = models.CharField(choices=EVENTS, max_length=2)
    info = models.TextField()


#start a listener for INSERT INTO or UPDATE queries
post_save.connect(save_handler, dispatch_uid='post_save')
#start a listener for DELETE queries
post_delete.connect(del_handler, dispatch_uid='post_delete')

log_db_event.py:

from core.models import LogDBEvents


#Q10: saves a signal into the database
def log_handler (signal_type, sender, **kwargs):
    #do not save events from LogDBEvents (otherwise unfinite calls!)
    if sender != LogDBEvents:
        LogDBEvents(event_type=signal_type,
                info="%s model changed with new entry %s"%(
                        sender.__name__,
                        kwargs['instance'])
        ).save()

#Q10: a create or add signal is intercepted
def save_handler(sender, **kwargs):
    if kwargs['created']:
        return log_handler ('DC', sender, **kwargs)
    else:
        return log_handler ('DE', sender, **kwargs)

#Q10: a delete signal is intercepted
def del_handler(sender, **kwargs):
    return log_handler ('DD', sender, **kwargs)
4

1 に答える 1

0

私はこの方法を使用することになりました:

log_db_event.py:

import core.models
instance=core.models.LogDBEvents()

できます ;)。

于 2013-08-26T04:43:30.353 に答える