【问题标题】:How can I get parent model object from signal in django如何从 django 中的信号获取父模型对象
【发布时间】:2020-04-06 13:32:35
【问题描述】:

我是 python 和 django 的初学者。 你能向我解释一下,我怎样才能从单对多关系中的信号中获取父模型。 例如,我有 2 个模型:

class ModelOne(models.Model):
 name = models.CharField(max_length=20)

class Modeltwo(models.Model):
 comment = models.CharField(max_length=20)
 mo = models.ForeignKey(ModelOne)

还有 post_save 的信号:

@receiver(post_save)
def post_save_model(sender,instance,**kwargs):
 print("Signal: ",instance.objects.all().last())

保存ModelTwo时如何在post_save_model函数中获取ModelOne的相关对象?

【问题讨论】:

  • post_save_model 方法处理哪个模型的保存?
  • 任何型号。我没有明确确定。我想要 post_save 的统一功能。

标签: python django django-models foreign-keys


【解决方案1】:

通过预取,类似这样:

Modeltwos.objects.prefetch_related('modelone_set')

【讨论】:

    【解决方案2】:

    你可以这样试试:

    @receiver(post_save, sender=ModelTwo)
    def post_save_model(sender,instance,**kwargs):
         print("ModelOne: ", instance.mo)
    

    因为ModelOneModelTwo 的ForeignKey,由字段名称mo 连接。如果您想将所有 ModelTwo 实例连接到该 ModelOne 实例,请尝试这样:

    @receiver(post_save)
    def post_save_model(sender,instance,**kwargs):
        all_model_two_instances_queryset = instance.mo.modeltwo_set.all()
    

    【讨论】:

    • post_save_model 函数用于许多模型。如何获取外键“mo”和model_set modeltwo_set?
    • 这没有意义。你必须定义发件人,这里是ModelTwo
    猜你喜欢
    • 2014-03-26
    • 2021-11-13
    • 2021-01-25
    • 2021-02-14
    • 2023-03-14
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多