如何获取多对多字段的related_name?
我正在尝试获取多对多字段的related_name。在M2M场位于betweeen模型“集团”和“经幢”,并在组模型定义如下:如何获取多对多字段的related_name?
lections = models.ManyToManyField(Lection, blank=True)
领域看起来是这样的:
<django.db.models.fields.related.ManyToManyField object at 0x012AD690>
的打印field.__dict__
是:
{'_choices': [],
'_m2m_column_cache': 'group_id',
'_m2m_name_cache': 'group',
'_m2m_reverse_column_cache': 'lection_id',
'_m2m_reverse_name_cache': 'lection',
'_unique': False,
'attname': 'lections',
'auto_created': False,
'blank': True,
'column': 'lections',
'creation_counter': 71,
'db_column': None,
'db_index': False,
'db_table': None,
'db_tablespace': '',
'default': <class django.db.models.fields.NOT_PROVIDED at 0x00FC8780>,
'editable': True,
'error_messages': {'blank': <django.utils.functional.__proxy__ object at 0x00FC
7B50>,
'invalid_choice': <django.utils.functional.__proxy__ object
at 0x00FC7A50>,
'null': <django.utils.functional.__proxy__ object at 0x00FC7
A70>},
'help_text': <django.utils.functional.__proxy__ object at 0x012AD6F0>,
'm2m_column_name': <function _curried at 0x012A88F0>,
'm2m_db_table': <function _curried at 0x012A8AF0>,
'm2m_field_name': <function _curried at 0x012A8970>,
'm2m_reverse_field_name': <function _curried at 0x012A89B0>,
'm2m_reverse_name': <function _curried at 0x012A8930>,
'max_length': None,
'name': 'lections',
'null': False,
'primary_key': False,
'rel': <django.db.models.fields.related.ManyToManyRel object at 0x012AD6B0>,
'related': <RelatedObject: mymodel:group related to lections>,
'related_query_name': <function _curried at 0x012A8670>,
'serialize': True,
'unique_for_date': None,
'unique_for_month': None,
'unique_for_year': None,
'validators': [],
'verbose_name': 'lections'}
现在应该通过一个lection-instance来访问该字段。所以这是通过lection.group_set
但我需要动态访问它,所以需要从某处获取related_name属性。
文档中Here,还有一个要注意的是可以访问ManyToManyField.related_name
,但这并不为我不知为什么...
帮助将大量的赞赏工作。 在此先感谢。
编辑: 是否需要将类放在所有模型之上,它指定了related_name属性,因此每个模型都有一个类似的名称?像这里也许? - > docs.djangoproject.com/en/dev/topics/db/models/#be-careful-with-related-name
我已经在过去使用object.yourmanagerclass.join_table
,但请注意,这将返回一个带引号的字符串
你贴什么基本上是:
>>> f = models.ManyToManyField(...)
>>> dir(f)
(...)
你可能需要什么,是让含有该领域中的实际模型类:
class MyModel(models.Model):
my_field = models.ManyToManyField(..., related_name='some_related_name')
- 然后你可以这样做:
感谢你的答案。 函数“related_query_name”的访问方式如下:'MyModel._meta.get_field_by_name('my_field')[0] .field.related_query_name()',但输出仍然是“group”,这是链接表。但是, (自动命名)相关的查询名称是“group_set”..你有什么想法吗? – amann 2010-06-14 11:25:52
@amann'fs._meta.get_field_by_name('group')[0] .get_accessor_name()'将返回'group_set'。但是,你不知道Django什么时候会改变这个API,所以'%_set'.format('group')可以更明智,如果你没有改变相关的名字。 – 2014-01-31 16:16:34
请你给出一个实际的例子来呢?我的字段没有管理员属性。 – amann 2010-05-18 09:37:48