2016-04-02 1 views
0

form.save()で新しいアカウントが作成されるたびに、デフォルトのDBデータを挿入するためのDjangoの最良の方法は何ですか?Djangoのデフォルトデータ(Fixtures?)は、views.save()のviews.pyにありますか?

ユーザーが新しいビジネスプロファイルアカウントを作成したばかりで、form.save()の直後に新しいビジネスIDと今日の日付でカスタマイズされたデータをプリロードすることができます(私は新しいアカウントIDを利用できます)。

明らかに、私はModel.objects.create(...)の10行を書き、それを使って書くことができますが、私はJSON fixtureファイルなどを使ってこれを行う "正しい" Django/Pythonの方法が何であるのだろうかと思っていました。

+0

フィクスチャファイルはテスト用です。 –

+0

何か提案@DanielRosemanこれについてはどうすればいいですか? – WayBehind

答えて

1

気になるのは、IDのみを作成する場合は、nullの許可フィールドと自動IDフィールドを持つモデルを持つことができます。他のフィールドにはデフォルト値を設定することもできます。デフォルトフィールドオプションは、コールバックも許可します。 例: - で

created_at = models.DateTimeField(default=datetime.now) 

ルック:https://docs.djangoproject.com/en/1.9/topics/db/models/#field-options

すべてNULL可能フィールドまたはデフォルト値のフィールドを持つモデルは、本質的に)(form.saveに単一のコード行を使用して作成することができます。単一のデフォルトモデルオブジェクトのみを作成しようとしていると仮定します。

適切な方法として、ユーザーがモデルと権利関係(FK)に単純なフラグ(ビジネスプロファイルをアクティブとして記録してデフォルトのアクティビティをアクティブにしないなど)を設定して、ユーザーがデフォルトビジネスプロフィール。

+0

フィードバックいただきありがとうございます。残念ながら、これは他の変数を追加する必要があるため、今日の日付を設定するだけではありません。私は通常、 'auto_now_add = True'を使用します。 – WayBehind

+0

auto_now_add = trueは日付のデフォルト= datetime.nowを使用するよりも良いようです。私はちょうどデフォルト値のコールバックを持つ可能性を伝えたかったのです。コールバックは、特定のインスタンスのデフォルト値に達するための任意のタイプの複雑なロジックを持つことができます。 – utkarshmail2052

0

djangoのpost_save信号を使用できます。その使いやすい。

https://docs.djangoproject.com/en/1.9/ref/signals/#django.db.models.signals.post_save

あなたは、そのアプリケーション自体のmodels.pyにコードを置くことができます。

@receiver(post_save,sender=ModelName) 
def do_some_operation(sender, **kwargs): 
    if kwargs['created']:     # Executes only if created 
     obj = kwargs['instance'] 
     # do modifications with your obj 
     obj.save() 
+0

ありがとう!確認してみるよ! – WayBehind

関連する問題