0

假设我有这两个模型:

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_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']
4

1 回答 1

1

一种解决方法是添加以下内容related_name

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

然后project_obj.project毫不奇怪 ProjectUpdate 的字段与哪个字段相关。所以通常添加一个related_name与字段名称相同的名称。

于 2012-09-17T15:58:27.870 回答