2016-12-11 70 views
0

我正在創建一個簡單的體重管理應用程序,用戶可以在其中註冊,登錄和更新信息,如體重,身體測量等。我沒有用Django一會兒,慢慢地學習最好的我從一開始就離開的做法。更新用戶信息從單獨的模型Django

我使用的Django的allauth管理用戶註冊,因爲這可以讓人們與Facebook等

我創建了一個簡單的應用程序名爲「統計信息」與ForignKey到用戶登錄。

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

建議您爲與您的應用的用戶相關的應用專用功能創建單獨的用戶配置文件模型。最好創建一個UserProfile模型,該模型具有到User對象的OneToOneField鏈接。然後,您的Stat模型可以將ForeignKey改爲UserProfile而不是User。這是爲了給用戶對象提供抽象,並且如果您決定在同一個項目中創建另一個Django應用程序,並且需要用戶的不同規範,則可以提供靈活性。此外,通過UserProfile,您可以添加特定於應用程序的自定義字段。

你可以做的另一件事來改善這種建模是爲每個屬性創建單獨的實體。例如,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鏈接到用戶。這僅僅是因爲用戶是應該嚴格用於識別/驗證某人的模型。在用戶對象中添加額外字段(如高度和重量)並不是最好的,因爲它不直接與實體相關。 也許^上述實際上是你的意思,但你說'延長',所以我只是想澄清。但是,是的,在每個新應用程序中,您都會創建一個新的配置文件模型。 – zubhav

+1

我只是點擊了你附加的鏈接。是的,這是正確的方法! – zubhav