在Django中查找相关对象的关系字段

时间:2012-09-17 15:37:24

标签: django django-models

说我有这两种模式:

class Project(models.Model):
    name = models.CharField('Name', max_length=250)

class ProjectUpdate(models.Model):
    project = models.ForeignKey(Project)
    title = models.CharField('Title', max_length=250)

假设在我的代码中我使用的是Project实例,但我不能假设我正在使用的对象是一个项目实例。我只能假设它上面有一个或多个相关模型,我需要处理它。

现在我设法使用相关的管理器(project_obj.projectupdate_set)获取相关的类名。但我现在需要知道哪个领域创造了这种关系。在这种情况下,这将是ProjectUpdate上的“项目”字段。

我找到引用它的唯一地方是在相关经理的core_filters属性中,它给了我:{'project__id':1}

我可能会使用它,但感觉不对。

有什么想法吗?

修改

这是RelatedManager的属性:

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', 
 '__getattribute__', '__hash__', '__init__', '__module__', '__new__', 
 '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', 
 '__str__', '__subclasshook__', '__weakref__', '_copy_to_model', '_db', 
 '_inherited', '_insert', '_set_creation_counter', '_update', 'add', 
 'aggregate', 'all', 'annotate', 'bulk_create', 'clear', 'complex_filter',
 'contribute_to_class', 'core_filters', 'count', 'create', 'creation_counter',
 'dates', 'db', 'db_manager', 'defer', 'distinct', 'exclude', 'exists', 
 'extra', 'filter', 'get', 'get_empty_query_set', 'get_or_create', 
 'get_prefetch_query_set', 'get_query_set', 'in_bulk', 'instance', 'iterator', 
 'latest', 'model', 'none', 'only', 'order_by', 'prefetch_related', 'raw',
 'remove', 'reverse', 'select_for_update', 'select_related', 'update', 'using',
 'values', 'values_list']

1 个答案:

答案 0 :(得分:1)

解决方法是将related_name添加到:

project = models.ForeignKey(Project, related_name='project')

然后project_obj.project难怪ProjectUpdate的哪个字段与之相关。因此,通常添加一个与该字段名称相同的related_name