django post_save从发送模型中调用?

发布于 2021-01-29 14:10:13

我有一个很简单的模型可以工作:

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)

我知道我在signal.py中的create_badge函数有效。如果我发送的邮件没有发送者的值,则表示发送者是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(我以为这是解决办法?

谢谢。

关注者
0
被浏览
146
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    定义徽章 后, 只需将信号与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)
    

    测试外壳会话:

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看