2016-12-11 5 views
0

私は体重、体重測定などの情報を登録、ログイン、更新することができるシンプルな体重管理アプリケーションを作成しています。私はDjangoを少し使いませんでした。私が少し前に中止したところからの実践。別のモデルからユーザー情報を更新するDjango

これは、人々がFacebookでログインすることができますように私は、私は、ユーザーにForignKeyと「分析」と呼ばれるシンプルなアプリを作成したなど、ユーザ登録を管理するために

をジャンゴ-allauthを使用しています。

class Stat(models.Model): 

    user = models.ForeignKey(User, default=False) 

    height = models.CharField(max_length=20) 
    weight = models.CharField(max_length=20) 

    waist = models.CharField(max_length=20) 
    hips = models.CharField(max_length=20) 
    upperleg = models.CharField(max_length=20) 

    upperleg = models.CharField(max_length=20) 
    calf = models.CharField(max_length=20) 

    bodyfat = models.CharField(max_length=20) 

ユーザーができるようにしたいのは、日次/週単位でログインして統計情報を更新することです。その後、以前の統計を確認することができます。これはおそらく、上記のアプローチに基づくモデルフォームを介して行われます。私は時間の経過と共に複雑さを増すでしょう。

これには他にも利点がありますか?最良のアプローチが最高の場合は?そのモデルのすべてのオブジェクトを管理者のユーザーページ内にリストして、ユーザーの統計情報を簡単に確認できる方法はありますか?

ありがとうございます。

答えて

1

アプリのユーザーに関連するアプリ固有の機能のための個別のユーザープロファイルモデルを作成することをお勧めします。 UserオブジェクトへのOneToOneFieldリンクを持つUserProfileモデルを作成することをお勧めします。その後、あなたのStatモデルはUserの代わりにUserProfileのForeignKeyになることができます。これはUserオブジェクトに抽象化を提供し、同じプロジェクトに別のDjangoアプリケーションを作成して、そのユーザに対して異なる仕様を要求する場合に柔軟性を提供するためです。また、UserProfileを使用すると、アプリ固有のカスタムフィールドを追加できます。

このモデリングを改善するもう1つの方法は、統計ごとに別々のエンティティを作成することです。たとえば、HeightWeightStat、WaistStatなどです。しかし、これは完全に必要ではなく、あなたの好みに完全に依存します。

は、管理者ページにスタットインスタンスに関連するユーザのすべてを表示するには、Djangoの管理インライン使用:お返事を https://docs.djangoproject.com/en/1.10/ref/contrib/admin/#inlinemodeladmin-objects

+0

こんにちは@zubhavおかげで、それは多くのことを手伝っています。ユーザーにアクセスする必要のある各アプリ内でユーザーモデルを拡張してもいいですか?だから私の '統計'アプリの内部に新しいUserProfileモデルを作成しますか?または、UserProfile用の新しいアプリを作成しますか? 私はそれが最初のものだと確信していますが、私はちょうど正しいことを確認したいです。ここで素敵な小さな記事を見つけました - https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html#onetoone – JDavies

+1

ユーザーを「拡張」する代わりにモデルには、ユーザーへのOneToOneリンクを持つ全く異なるモデルを作成する必要があります。これは、ユーザーが誰かを識別/認証するために厳密に使用されるべきモデルであるためです。高さと重さのようなUserオブジェクトに余分なフィールドを持つのは実際にはエンティティに直接関係していないからです。 おそらく上記はあなたの意図したものですが、私は明確にしたかったので拡張しています。しかし、はい、すべての新しいアプリの中で、あなたは新しいプロファイルモデルを作成します。 – zubhav

+1

添付したリンクをクリックしました。はい、それは正しい方法です! – zubhav

関連する問題