2011-09-08 17 views
0

RegisteredSubscriberモデルを構造化して、以下の疑似コードで説明されている機能を実現するにはどうすればよいですか?Djangoモデル - 継承されたフィールド(Sorta?)

私はフィールドごとに機能を実装していたかもしれませんが、それは正しいとは思えず、ちょっとラブラウスです。思考?

61 class RegisteredSubscriber(Subscriber): 
62  user = models.ForeignKey(User) 
63  first_name = self.user.first_name 
64  last_name = self.user.last_name 
65  email = self.user.email 
66 
67 class AnonymousSubscriber(Subscriber): 
68  first_name = models.CharField(max_length = 100) 
69  last_name = models.CharField(max_length = 100, blank = True) 
70  email = models.EmailField(unique = True) 

さて、これは私が望んでいた機能を実現しているが、私は、その適切ではないと確信しています。思考?正式な方法は何ですか、私は設計ミスをしましたか?

59 class RegisteredSubscriber(Subscriber): 
60  user = models.ForeignKey(User, unique = True) 
61  first_name = 'candy' 
62  last_name = 'candy' 
63  email = 'candy' 
64 
65  def __init__(self, *args, **kwargs): 
66   super(RegisteredSubscriber, self).__init__(*args, **kwargs) 
67   
68   if self.id: 
69    self.first_name = self.user.first_name 
70    self.last_name = self.user.last_name 
71    self.email = self.user.email 
72 
73  def __unicode__(self): 
74   return u'%s %s' % (self.first_name, self.last_name) 
+1

しかし、RegisteredSubscriberに既にある*ユーザー*フィールドからfirst_name、last_name、...を取ってみませんか? – sergzach

答えて

0

すでにUserForeignKey関係を持っているので、私は何かが欠けていない限り、私は、RegisteredSubscriberモデルでfirst_name, last_name, emailフィールドを持つ必要性を理解していません。 RegisteredSubscriberインスタンスを使用してfirst_nameなどのフィールドにアクセスする場合は、ForeignKeyリレーションシップで__を使用できます。 例:user__first_name

+0

理由は、サブスクライバオブジェクトサブがあるとします。 sub.firstnameまたはsub.user.first_nameを持つのではなく、sub.first_nameを使用して、どちらの場合でもfirst_nameにアクセスしたいと思います。サブがRegisteredSubscriberの場合。 –

+0

ユーザーの 'first_name'などのコピーを' RegisteredSubscriber'テーブルに保存するか、単に 'sub.first_name'のようにアクセスしますか? – Pannu

関連する問題