我有以下信号:

@receiver(post_save, sender=Document)
def handle_added_or_edited_element(sender, instance, **kwargs):
    '''
    This signal is used to compare the original and the current instance of the object being saved.
    If at least one field has changed, a row is inserted in the revision history of the related srd_revision
    '''
    for field in sender._meta.get_fields():
        if field.name in ['srd_revision', 'srdrevision', 'srd_rev']:
            print(instance._meta.get_fields()[0])
        if not isinstance(field, (models.ManyToOneRel, models.ManyToManyRel)):
            if instance._get_field_value_map(instance._meta)[field.name].value != instance.__original_instance._get_field_value_map(instance._meta)[field.name].value:
                chapter, message = RevisionHistory().get_document_messages(instance=instance, created=False, updated_field=field.name)
                SrdRevisionHistory(chapter=chapter, title=message)

这两行:

if field.name in ['srd_revision', 'srdrevision', 'srd_rev']:
    print(instance._meta.get_fields()[0])

给我一个ManyToManyRel:<ManyToManyRel: srdapp.srdrevision>

我想访问与Document对象相关的srdrevision对象中的id.

推荐答案

instance._meta.get_fields()[0]是查询集对象(因为它来自M2M关系).不确定这是否是您要寻找的,但您可以打印srdrevision的id,例如print(instance.srdrevision.values_list("id", flat=True)),它打印您的所有关系id(与此对象相关的所有id和srdrevision类型).

请注意,您无法获取一个特定的id,因为这里可能有不止一个类型srdrevision的对象与您的实例相关!

在执行其他操作之前,您还需要判断instance._meta.get_fields()[0]类型,因为它可能不总是M2M类型.

Django相关问答推荐

Django REST框架中如何从另一个视图调用API视图?

如何连接到 docker 容器中的 postgres 数据库?

包含资源时,DRF 返回我的软删除记录

关于Django中批量保存对象的问题

在 GoDaddy 上安装 django 站点

django - 表单没有错误,但 form.is_valid() 没有验证

为 Django 模型生成非顺序 ID/PK

Django populate() 不可重入

无效的命令 WSGIDaemonProcess 在 CentOS 6.7 上部署 Django 应用程序

Django:如何使用动态(非模型)数据预填充 FormView?

Django - 如何从模型实例中获取管理员 URL

使用 Django 1.5 实现多种用户类型

Django Admin:如何在同一视图中显示来自两个不同模型的字段?

Python 社区里的小马是怎么回事?

在 PyPy 下运行 Django 的缺点?

如何在 django 中仅获取表的特定列?

找不到 msguniq.确保您安装了 GNU gettext 工具 0.15 或更新版本. (Django 1.8 和 OSX ElCapitan)

运行单元测试时禁用 Django South?

AttributeError:ManyRelatedManager对象没有add属性?

Django - 指定 Django 管理员应该使用哪个模型管理器