33575


# 前提

django1.10を使っています。  
python3.5.1でやっています。

# やりたいこと

django1.10では、_meta.get_field_by_nameが使えなくなったのですが、  
_meta.get_field_by_nameと同じことができるものってあるんですか？


CC BY-SA 3.0
2017-03-27T09:23:31.153
33574
2017-05-01T00:32:47.867
2020-06-17T08:14:45.997
-1
21218
question
django python3
django1.10の_meta.get_field_by_nameについて


django 1.10の[Model `_meta`
APIについてのドキュメント](https://docs.djangoproject.com/ja/1.10/ref/models/meta/)によると、`Options.get_field(name)`か`Options.get_fields()`を使って書き換えられる、とのことです。

具体的に`_meta.get_field_by_name(name)`についてどうすればよいかも書いてあったので (まだ英語のままですが) 引用します。

> Assuming you have a model named `MyModel`, the following substitutions can
> be made to convert your code to the new API:
>
> (中略)
>
>   * `MyModel._meta.get_field_by_name(name)` returns a tuple of these four  
>  values with the following replacements:
>     * `field` can be found by `MyModel._meta.get_field(name)`
>     * `model` can be found through the `model` attribute on the field.
>     * `direct` can be found by: `not field.auto_created or field.concrete`  
>  The `auto_created` check excludes all “forward” and “reverse” relations
> that are created by Django, but this also includes `AutoField` and
> `OneToOneField` on proxy models. We avoid filtering out these attributes
> using the `concrete` attribute.
>     * `m2m` can be found through the `many_to_many` attribute on the field.
>

ただし、新しいAPIを使う形にリファクタリングする方が良いだろう、とも書いてあります。  
より詳しくはドキュメントを参考にしてください。

  * [Model `_meta` API](https://docs.djangoproject.com/ja/1.10/ref/models/meta/) \-- Django 1.10 Documentation (ja)


CC BY-SA 3.0
2017-03-27T09:52:02.150
33575
2017-05-01T00:32:47.867
2017-05-01T00:32:47.867
19110
19110
33574
answer