【问题标题】:Connecting Foreign key models with Django signal用 Django 信号连接外键模型
【发布时间】:2020-11-29 01:11:09
【问题描述】:

我正在尝试构建一个 Django 信号,其发送者是模型(称为 Bacteria),接收者是模型(称为 Bumblebee)。这些模型通过以下方式具有外键关系:

class Bumblebee(models.Model):
    name = models.CharField(max_length=50)

class Bacteria(models.Model):
    bumblebee = models.ForeignKey(Bumblebee, on_delete=models.CASCADE) 

当我构建这个 post_save 信号来监听正在创建的 Bacteria 时,我如何调用 Bumblebee 的字段?这是我拥有的,但它不起作用。

@receiver(post_save, sender=Bacteria)
def my_handler(sender, **kwargs):
    bumblebee = Bacteria.bumblebee
    print(bumblebee.name)

【问题讨论】:

    标签: django django-models django-signals


    【解决方案1】:

    您需要使用当前创建的 Bacteria 实例。

       @receiver(post_save, sender=Bacteria)
       def my_handler(sender,instance,created,**kwargs):
         if created:
            bumblebee = instance.bumblebee
            print(bumblebee.name)
    

    这里的实例是细菌的对象。

    【讨论】:

    • 非常感谢!这非常有效。还有一个问题 - 如果我要尝试引用另一个模型 User,它与 Bumblebee 有 FK 关系,我可以在一个以 Bacteria 开头的信号中完成这一切吗?
    • 是的,您可以使用 instance.user 在同一信号中执行此操作
    • 谢谢!最后一个问题(我保证,但这些很有帮助)。如果实例的字段不是与另一个对象的外键,但名称相同,我可以使用 == 在此信号中以某种方式连接它们吗?有的喜欢'if instance.name == Insect',然后调用Insect?
    • 您想在信号中使用其他模型吗?是的,你可以这样做。
    • 您可以先在信号页面导入Insect模型,然后获取名称与大黄蜂名字相似的Insect模型列表。示例:Insect.objects.filter(name=instance.bumblebee.name)
    猜你喜欢
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 2013-01-17
    • 2011-01-13
    • 1970-01-01
    • 2012-02-07
    相关资源
    最近更新 更多