2017-02-14 6 views
0

Djangoのドキュメントとソースコードで、主キーフィールドのserialize=Falseの理由が見つかりませんでした。それを設定する特別な理由はありますか?このフィールドはシリアライズされたオブジェクトの一部ではありません言うほど簡単ですserialize = False on Primary-keyフィールドの意味は?

おかげ

答えて

1

Azd325 ..ものの

は、私があるのモデルにあなたの質問の懸念を推測します移行され、serialize = Falseで生成されたIDを持っていますか? hereのようなものです。あなたがあなたのオブジェクトの明示的なIDを宣言しないと決めたので、Djangoのエンジントリックが本来のIDを作成するため実際にはありません。

テストの追加

class Model1Test(models.Model): 
    justafield = models.CharField(max_length=1000) 

移行が結果明示的なIDなしでモデルを作成します

を作っ

class Migration(migrations.Migration): 

    dependencies = [ 
    ] 

    operations = [ 
     migrations.CreateModel(
      name='Model1Test', 
      fields=[ 
       ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), 
       ('justafield', models.CharField(max_length=1000)), 
      ], 
     ), 
    ] 

データベースレベルのスクリプト

CREATE TABLE public.module1_model1test 
(
    id integer NOT NULL DEFAULT nextval('module1_model1test_id_seq'::regclass), 
    justafield character varying(1000) NOT NULL, 
    CONSTRAINT module1_model1test_pkey PRIMARY KEY (id) 
) 

Quassnoiからことを行うにはいくつかの理由:

  1. あなたが何か
  2. に結合可能であるためにあなたのテーブルを必要とする、あなたのテーブルをクラスタ化することにしたい場合は、プライマリのいくつかの種類を必要としますキー
  3. テーブルデザインでプライマリキーが必要ない場合は、デザインを再考してください。おそらく何か不足しています。なぜ同じレコードを保持するのですか?
関連する問題