0

これら2つのモデルがあるとします:

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 インスタンスを操作しているとしますが、操作しているオブジェクトがプロジェクト インスタンスであるとは想定できません。作業が必要な関連モデルが 1 つ以上あるとしか思えません。

これで、関連マネージャー (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はフィールドと同じ名前の a を追加します。

于 2012-09-17T15:58:27.870 に答える