2011-08-03 22 views
1

私は新しいdjangoウェブサイト用のユーザープロファイルクラスを作成しています。私は自分のモデルでユーザーの物理アドレスを表現する方法を決定しようとしています。djangoで新しいモデルとフィールドを作成する方法は?

モデルの新しいサブクラスを作成し、

class UserProfile(models.Model): 
    ... 
    address = models.OneToOneField(AddressModel) 
    ... 
class AddressModel(models.Model) 
    street_address = models.CharField(max_length=30) 
    city = models.CharField(max_length=15) 
    .... 

か、それは私が一般的に

class UserProfile(models.Model): 
    ... 
    address = AddressField(location_dict) 
    ... 
class AddressField(models.Field) 
    # details go here 
    ... 

答えて

4

のように新しいアドレスフィールドを作成した方がよいようなOneToOneキーとそれを参照するためのより良い練習です独立したモデルを作成すると便利です。というエントリが作成されている可能性があります。たとえば、アドレスの集まりとユーザーの集まりで終わる可能性があり、そのすべてがすぐにリンクされるわけではない場合は、それらを別々にしておきます。データベース内のすべてのアドレスは、常に、すぐにユーザーに関連付けされる場合

しかし、私は単純にモデルに新しいフィールドを追加したいです。

注:NULL値のデータベース列を持つことは間違っていて邪悪であると言われることがあるため、住所のいずれかがNoneになる場合は別のモデルを使用する必要があります。同意しません;このようなケースでは、1対1のモデルエントリが存在するかどうかをチェックするよりも、ヌルアドレスをチェックするという不便さを感じることはありません。イーライ同様

3

は、それが独立の問題だ、と述べました。この特定の例では、私はのフィールドをアドレスにしますが、ユーザーあたり1つのアドレスしか持たないことが予想される場合に限ります。各ユーザーが複数のアドレス(ホームアドレスと休暇アドレスなど)を持っている場合、多対1の関係をモデル化するForeignKeyを使用してモデルを設定することをお勧めします。

class UserProfile(models.Model): 
    ... 

class AddressModel(models.Model) 
    user = models.ForeignKey(UserProfile) 
    street_address = models.CharField(max_length=30) 
    city = models.CharField(max_length=15) 
    location = models.CharField(max_length=15) #"Home," "work," "vacation," etc. 

多くのAddressModelオブジェクトを作成して、それぞれUserProfileに関連付けることができます。あなたの質問に答えるために

+1

この関係は、期待されるものとは逆のものではありません。あなたの例では、各ユーザーは1つのアドレスしか持てませんが、1つのアドレスは多くのユーザーに属しています。私はそれが別の方法であることを期待するでしょう。 – richardolsson

+0

おっと!ありがとう、固定。 – stillLearning

1

、私は他のユーザーによって述べたように、一般的に、それはアドレスを分離するために、おそらくより良いかなと思います。

私はより多くのあなたがデータベースの正規化について学ぶ簡単にこの質問を答えることであると思います。

この記事で、Using MySQL, Normalisationは、あなたが正規の「形」の基本を把握助けるべきです。ところで、MySQLというタイトルが付けられていても、リレーショナルデータベースでは非常に一般的です。

通常のフォームをすべてのプロジェクトに適用する必要はありませんが、実際にそれについて学ぶことは本当に役立ちます。

関連する問題