モデルだけで循環インポートエラーに関連する問題がかなりあるようですが、モデルとシグナルコールバックでも同様の問題が発生しているようです。私はDjangoにかなり慣れていないので、おそらくアプリを正しく構成していないことに関係しています。いくつかのコード:
バッジ/models.py:
from django.db import models
from django.contrib.auth.models import User
from datetime import datetime
from tasks import badgeaward_callback
class Award(models.Model):
user = models.ForeignKey(User)
description = models.TextField(blank=False)
award_date = models.DateTimeField('date awarded',default=datetime.now)
def __unicode__(self):
return self.description
class Points(models.Model):
POINT_TYPES = (
('signup', 'Sign up'),
...etc...
)
user = models.ForeignKey(User)
points = models.IntegerField()
date = models.DateTimeField('date created',default=datetime.now)
description = models.TextField(blank=False)
data = models.TextField(blank=True)
type = models.CharField(max_length=20,choices=POINT_TYPES)
def __unicode__(self):
return self.description
models.signals.post_save.connect(badgeaward_callback, sender=Award)
バッジ/tasks.py
from badges.models import Points
def badgeaward_callback(sender, **kwargs):
award = kwargs.get('award')
p = Points()
p.points = 100
p.type = 'badgeawarded'
p.description = award.description
p.user = award.user
p.save()
したがって、モデルはbadgaward_callbackをインポートしています(これは私が得るエラーです:名前badgeaward_callbackをインポートできません)が、タスクはポイントモデルをインポートしています-これが私のエラーの根本的な原因であると思います。
アプリをどのように構成すべきかについてのアドバイスは大歓迎です。Badgesaward_callbackをmodels.pyに入れるだけでいいですか?それは機能します(まあ、これ以上のエラーはありません)が、後でかなりの数のコールバック関数を追加する可能性があるときに、それは良いアプローチですか?