我有以下信号:
@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>
我想访问与
id
对象相关的 srdrevision
对象的 Document
。
instance._meta.get_fields()[0]
是一个查询集对象(因为它来自 M2M 关系)。不确定这是否是您要查找的内容,但您可以打印 srdrevision
的 id,例如 print(instance.srdrevision.values_list("id", flat=True))
,它会打印您的所有关系 id(与此对象相关且属于 srdrevision
类型的所有 id)。
请注意,您无法获取一个特定的 id,因为可能有多个
srdrevision
类型的对象与您的实例相关!