2016-12-22 13 views
1

PEP8では、いくつかの単語にキャメルケース(例:ProfileAttributeGroup)を付けたクラスに名前を付け、変数にアンダースコアを使用します(profile_attribute_group)。django - 外部キーを強調する - 賛否両論

しかし、ジャンゴとリバースリレーションシップ(およびテンプレート)に関しては、クラスの小文字の名前を使用する必要があります。

例えば、ProfileAttributeGroupProfileモデルの1対1のキーがある場合、逆引き参照はprofile.profileattributegroupになります。

これで上書きできます。この小文字はDetailViewテンプレートとUpdateViewテンプレートでもSQL結合でも発生します(例:someattr.filter(profileattributegroup__isnull=False))。これについては何もできません。

これは、そこにアンダースコアを追加することなく、外部キー名を小文字にすることが理にかなっていると思います。このようにして、いつprofile_attribute_groupまたはprofileattributegroupを使用するかを覚えておく必要はありません。

ただし、アンダースコアを明示的に無視するとPEP8と矛盾します。

私の質問は他に誰かが疑問を持っていましたか?そして、私が考えなかったアンダースコアを無視するという将来の弱点はありますか?

+0

私はあなたの推理を得ていません。 Djangoは外部キーを**フィールド**と定義しています。したがって、フィールド(lowercase_with_underscore)の規約に従ってください。あるいは 'Person(Model):WeirdNameWithCaps = SomeField(...)'のようなコードを書いていますか? – Bakuriu

答えて

0

それはあなたがそれほど気になるなら、確かにあなたができることがあります。リバースリレーションを自動的に定義するすべてのリレーションシップフィールドでは、related_nameを指定することにより、デフォルトをオーバーライドすることもできます。したがって、実際にprofile.profileattributegroupが好きでない場合は、related_name='profile_attribute_group'で1対1のフィールドを定義してください。

関連する問題