似乎有很多与圆形导入错误相关的问题只是模型,但我似乎遇到了与我的模型和信号回调类似的问题。我是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()
因此,模型正在导入badgeaward_callback(这是我得到的错误:无法导入名称badgeaward_callback),但任务正在导入Points模型 - 我认为这是我错误的根本原因。
我非常感谢有关如何构建我的应用程序的任何建议。我应该将badgesaward_callback放入models.py吗?这样做(好吧,没有更多的错误),但是后来我可能会添加更多的回调函数,这是一个很好的方法吗?
答案 0 :(得分:3)
就更好的结构而言,不是tasks.py
重命名signals.py
而是来自models.py
models.signals.post_save.connect(badgeaward_callback, sender=Award)
结束时将此行移至signals.py
。然后,您不需要在models.py
from tasks import badgeaward_callback
答案 1 :(得分:1)
您可以将models.signals.post_save.connect(badgeaward_callback, sender=Award)
移至tasks.py
:
from django.db import models
from badges.models import Award, 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()
models.signals.post_save.connect(badgeaward_callback, sender=Award)
然后在模型包的tasks
中导入__init__.py
。