2011-09-09 2 views
0

内のユーザーに関する追加情報を格納する(特に、簡単にアップグレードするDBスキームを作ってみるために)(this questionにPersonとアドレスを分離するように)、私ははいくつかの理由から、Djangoの

別のオブジェクト内のすべてのユーザーの拡張プロパティを格納する必要があります

私はAUTH_PROFILE_MODULEオーバーライドセットを持っており、def_user_profileをキャプチャします。

class CustomUser(models.Model): 
    user = models.ForeignKey(User, unique=True) 

def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     CustomUser.objects.create(user=instance) 

質問です:私はCustomUserにカスタムタイププロパティを追加する場合、次のように:

class CustomPropertySet(models.Model): 
    this_is_a_Farmer = models.BooleanField() 

class CustomUser(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    extdata = models.CustomProperySet() 

これは自動的に新しいユーザーを追加することでCustomProperySetエントリを作成しますか? CustomPropertySetは、そのCustomUser所有者にForeignKeyと戻って関連付ける必要がありますか? 2番目の質問:オブジェクトが削除されたときにこのような拡張プロパティを削除する方法は?

答えて

1

がこれらに明白な答えは「それを試してみて、見つける」ですが、私たちはここに丁寧な人だ...

  • は、それが自動的にCustomPropertySetを作成するのでしょうか?

extdataに何かを割り当てると、何を割り当てますか? TrueとFalseを割り当てることはおそらくうまくいかず、CustomPropertySetインスタンスを割り当てて、それを作成する必要があります。

これを試してみると、これは明らかになります。

  • CustomPropertySetはCustomUserインスタンスを指す必要がありますか?

いいえカスタムプロフェッショナルt ySetは寂しいだけでも生き残ることができます。あなたのカスタムユーザーはそれを指していますが、恥ずかしそうではなく、誰がどのくらい多くの人を指しているか気にしません。

  • カスケード依存関係を削除するにはどうすればよいですか?

See the documentation about cascading deletes

1

あなたは別のモデルのフィールドとしてモデルを割り当てることはできません。それはちょうどそのように動作しません。それ以外には、モデルレベルのフィールド宣言をインスタンスレベルの属性に変換するメタクラスの魔法があります。​​で試したようなモデルではうまく動作しません。

とにかく、何をしようとしているのか分かりません。あなたのプロファイルクラスに余分なデータが必要な場合は、追加するだけです。他のクラスと共有されているデータの構造が必要な場合は、おそらくサブクラス化が役に立ちます。

関連する問題