Python django post_是否从发送模型中保存呼叫?

Python django post_是否从发送模型中保存呼叫?,python,django,django-models,django-signals,Python,Django,Django Models,Django Signals,我有一个非常简单的模型: class Badge(models.Model): name = models.CharField(max_length=16, help_text="Name for Badge") category = models.ForeignKey(BadgeCategory, help_text="Category for badge") description = models.CharField(max_length=32, help_tex

我有一个非常简单的模型:

class Badge(models.Model):

    name = models.CharField(max_length=16, help_text="Name for Badge")
    category = models.ForeignKey(BadgeCategory, help_text="Category for badge")
    description = models.CharField(max_length=32, help_text="A brief description")
    file = models.ImageField(upload_to=format_badge_name)

    signals.post_save.connect(create_badge, sender=Badge)
我知道我在signals.py中的create_badge函数可以工作。如果我发送它时没有给sender一个值,它会说sender是一个LogEntry对象。我想/需要参考post_save脚本中的一些实例信息,如下所示:

def create_badge(sender, instance, created, **kwargs):

    from userinfuser.ui_api import UserInfuser
    from django.conf import settings

    if created:
        api_key = settings.API_KEY
        api_email = settings.API_EMAIL

        ui = UserInfuser(api_email, api_key)
        ui.create_badge(instance.category.name, instance.name, instance.description, instance.file.url)
我在哪里可以调用我的post_save调用,以便它知道Badge(我假设这是修复


谢谢。

在定义了徽章后,只需将信号连接到sender=Badge,测试示例:

from django.db import models
from django.db.models import signals

def create_badge(sender, instance, created, **kwargs):
    print "Post save emited for", instance

class BadgeCategory(models.Model):
    name = models.CharField(max_length=100)

class Badge(models.Model):

    name = models.CharField(max_length=16, help_text="Name for Badge")
    category = models.ForeignKey(BadgeCategory, help_text="Category for badge")
    description = models.CharField(max_length=32, help_text="A brief description")

signals.post_save.connect(create_badge, sender=Badge)
测试shell会话:

In [1]: category = BadgeCategory(name='foo')

In [2]: category.save()

In [3]: badge = Badge(category=category, name='bar', description='test badge')

In [4]: badge.save()
Post save emited for Badge object

到底是什么问题?如果没有像在
信号中那样指定
发送方
。post\u save.connect(create\u badge,sender=badge)
,所有
model.save()
调用都会导致
create\u badge()
被调用我已经尝试过了,虽然没有出错,但它显然也没有调用信号。是否可以从init内部调用所有这些?我被你的词汇弄糊涂了。你没有调用信号:你要么将它连接到接收器,要么发射它(这将调用所有连接的接收器)。无论如何,我在我的答案中添加了一个经过测试/工作的示例。我确信造成混淆的原因是我缺乏正式的知识(尤其是信号)。如果我将signal.post_save.connect命令放在调用的模型类中,但我会遇到依赖性问题(Badge中未定义Badge)。我唯一的另一个例子是与用户配置文件相关的,发送方是用户模型,因此我以前没有遇到过这种情况。如果我将signals.post_save.connect命令放在徽章模型之外,它似乎根本不会被调用。你一直都是对的。我在传递到接受者