[解決済み] djangoの抽象モデル vs 通常の継承
2023-01-31 18:58:59
質問
構文以外に、django の抽象モデルを使うことと、django のモデルで普通の Python 継承を使うことの違いは何ですか? 長所と短所は?
UPDATE: 私の質問が誤解されていたようで、抽象モデルと django.db.models.Model を継承したクラスの違いについて回答がありました。 私は実際に、django の抽象クラス (Meta: abstract = True) を継承するモデルクラスと、例えば 'object' (models.Model ではなく) を継承する普通の Python クラスの違いを知りたいのです。
以下はその例です。
class User(object):
first_name = models.CharField(..
def get_username(self):
return self.username
class User(models.Model):
first_name = models.CharField(...
def get_username(self):
return self.username
class Meta:
abstract = True
class Employee(User):
title = models.CharField(...
どのように解決するのですか?
<ブロッククオート私は実際にモデルクラスの違いを知りたいです。 モデルクラスが django の抽象クラス (Meta: abstract = True) を継承しているのと を継承する Python クラスの違いを知りたいのです。 モデル.モデルではない)。
のサブクラスに対してのみ、Django はテーブルを生成します。
models.Model
を生成するので、前者は...
class User(models.Model):
first_name = models.CharField(max_length=255)
def get_username(self):
return self.username
class Meta:
abstract = True
class Employee(User):
title = models.CharField(max_length=255)
...すると、次のような行程で1つのテーブルが生成されます...
CREATE TABLE myapp_employee
(
id INT NOT NULL AUTO_INCREMENT,
first_name VARCHAR(255) NOT NULL,
title VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
...一方、後者は...
class User(object):
first_name = models.CharField(max_length=255)
def get_username(self):
return self.username
class Employee(User):
title = models.CharField(max_length=255)
...テーブルが生成されることはないでしょう。
多重継承を使えばこんなことも...。
class User(object):
first_name = models.CharField(max_length=255)
def get_username(self):
return self.username
class Employee(User, models.Model):
title = models.CharField(max_length=255)
...これはテーブルを作成しますが、これは
User
クラスで定義されたフィールドは無視されるので、最終的には以下のようなテーブルになります...
CREATE TABLE myapp_employee
(
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
関連
-
[解決済み】Djangoのクエリセットフィルタリングでnot equalを行うにはどうすればよいですか?
-
[解決済み] Pythonのsuper()は多重継承でどう動くのか?
-
[解決済み] Djangoの "slug "とは何ですか?
-
[解決済み] Django のモデルで on_delete は何をするのですか?
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] PILからopenCVフォーマットへの変換
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
-
[解決済み] virtualenvsはどこに作成するのですか?