【问题标题】:Get ID from m2m instance从 m2m 实例获取 ID
【发布时间】:2017-03-10 09:06:38
【问题描述】:

在具有 M2M 关系的模型中。有没有办法在信号中获取这种关系的字段的 id?

class Foo(models.Model):
    field1 = ...
    bar = models.ManyToManyField(Bar)

@receiver(post_save/m2m_changed, sender=Foo)
def whatever(sender, instance, **kwargs):
    # get the ID of bar instance here

我希望能够获得正在使用的 Bar 实例的 ID。有什么想法吗?

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    使用m2m_changed

    @receiver(m2m_changed, sender=Foo)
    def whatever(sender, instance, action, pk_set, **kwargs):
        if action == "pre_add":
             print pk_set
    

    pk_set

    对于 pre_add、post_add、pre_remove 和 post_remove 操作,这是一组已添加到关系或从关系中删除的主键值。对于 pre_clear 和 post_clear 操作,这是 None。

    https://docs.djangoproject.com/en/1.10/ref/signals/#m2m-changed

    【讨论】:

      【解决方案2】:

      [更新]:

      from django.db.models.signals import m2m_changed
      
      def whatever(sender, instance, **kwargs):
          print(kwargs['pk_set'])
      
      m2m_changed.connect(whatever, sender=Foo.bar.through)
      

      [旧]:

      instance.bar.values('id')instance.bar.values_list('id', flat=True)

      【讨论】:

      • 这样我会得到所有关系的列表,而不是保存的。
      猜你喜欢
      • 2012-11-06
      • 2021-06-09
      • 2010-10-12
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      相关资源
      最近更新 更多