2012-01-25 18 views
1

Django初心者はここに。オブジェクトを自動的に作成する

class A(models.Model): 
    b = models.ForeignKey(B) 
    ... 

class B(models.Model): 
    user = models.ForeignKey(User) 
    ... 

私は明示的にBのインスタンスを指定せずにAのインスタンスを作成できるようにしたいです。 ForeignKeyフィールドがdefaultパラメータを受け入れることがわかりましたが、ユーザーごとに1つのインスタンスを作成する方法を理解できませんでした。

class A(models.Model): 
    b = models.ForeignKey(B, default=B(user=request.user)) 

が、モデルを約requestを知らないので、明らかに動作しませんそのような

何か。

このデフォルトインスタンスを作成するには、(Aが作成されたときに、Userが作成されたときではなく)必要なときに、どのような方法が適していますか?どこが適切な場所ですか?

(Aが作成されたときに)それが必要とされる時に、このデフォルトのインスタンスを作成するための良い方法は何

答えて

0

明らかに。それが働く唯一のものです。

デフォルトにはさまざまな種類があります。モデルのデフォルトは、アプリケーションの外に存在します。

これは、現在のセッションとそのセッションに関連付けられている現在のユーザーに依存するため、「モデル」のデフォルトにはならない優れた例です。

これは「アプリケーション」のデフォルト設定です。 のモデルになります。理想的には、それは単にView関数の一部です。

デフォルトの管理者を使用する場合は、このデフォルト値を含むようにAdminクラス定義を拡張します。

+0

のインスタンスを指定せずにAのインスタンスを作成できるようにしたいが言葉を理解していませんでした。あなたはそれが不可能であると言っていますか?代わりに、Aを作成したい場所ごとに明示的にチェックする必要がありますか? –

+0

"必要な時には"明らかに見えました。そして彼らはあなたの言葉でした。私はそれが助けにならなかったと思う。これは「モデルの外に出る」と強調した。それは助けにもならなかったと思います。 「単語を理解できませんでした」は非常に曖昧かつ曖昧な声明なので、少し集中することができれば助けになります。そうでなければ、私はそれをどのように書き直すのか本当に分かりません。 –

+0

あなたの答えは、あなたが提案していることにすでに精通している人にとって意味があると思いますが、それは残念ながら私ではありません。私はそれを読んだ後に何をすべきかわからない。 –

0

あなたはこのような何かを行うことができます:

class A(models.Model): 
    b = models.ForeignKey(B) 

    def save(self, *args, **kwargs): 
     user = kwargs["user"] 
     if not self.id and not self.b: 
      obj_b = B.objects.create(user=user) 
     self.b = obj_b 
     return super(A, self).save(*args, **kwargs) 

class B(models.Model): 
    user = models.ForeignKey(User) 

しかし、これは非常に特別なunflexibleソリューションです。

+0

ありがとう、これを試してみましょう。 –

0

私は明示的に はB.

class A(models.Model): 
    b = models.ForeignKey(B,blank=True,null=True) 
関連する問題