【问题标题】:Updating user information from separate model Django从单独的模型 Django 更新用户信息
【发布时间】:2017-04-26 14:48:49
【问题描述】:

我正在创建一个简单的体重管理应用程序,用户可以在其中注册、登录和更新体重、体重等信息。我已经有一段时间没有使用 Django 了,并从我离开的地方慢慢学习最佳实践不久前。

我正在使用 django-allauth 来管理用户注册,因为这允许人们使用 Facebook 等登录。

我创建了一个名为“Stats”的简单应用,并为用户提供了 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)

我希望用户能够每天/每周登录和更新统计信息。然后能够查看以前的统计数据。这可能会通过基于上述方法的模型形式来完成。随着时间的推移,我会增加更多的复杂性。

有没有其他方法可以做到这一点有什么好处?如果最好的方法是最好的?有没有办法可以在管理员的用户页面中列出该模型中的所有对象,以便能够轻松地查看用户统计信息?

提前致谢。

【问题讨论】:

    标签: python django django-1.10


    【解决方案1】:

    建议您为与应用用户相关的应用特定功能创建单独的用户配置文件模型。最好创建一个 UserProfile 模型,该模型具有指向 User 对象的 OneToOneField 链接。然后,您的 Stat 模型可以 ForeignKey 到 UserProfile 而不是 User。如果您决定在同一个项目中创建另一个需要不同用户规范的 Django 应用程序,这是为 User 对象提供抽象并提供灵活性。此外,使用 UserProfile,您可以添加特定于应用程序的自定义字段。

    您可以做的另一件事来改进此建模,即为每个统计数据创建单独的实体。例如,身高体重统计、腰围统计。但是,这不是完全必要的,完全取决于您的喜好。

    要在管理页面中显示所有与用户相关的 Stat 实例,请使用 Django Admin 内联:https://docs.djangoproject.com/en/1.10/ref/contrib/admin/#inlinemodeladmin-objects

    【讨论】:

    • 嗨@zubhav 感谢您的回复,这对您有很大帮助。我很清楚你会在每个需要访问用户的应用程序中扩展用户模型吗?所以在我的“统计”应用程序中创建一个新的 UserProfile 模型?或者为 UserProfile 创建一个新应用程序?我确定这是第一个,但我只是想确保这是正确的。我在这里找到了一篇不错的小文章 - simpleisbetterthancomplex.com/tutorial/2016/07/22/…
    • 您应该创建一个完全不同的模型,该模型具有指向用户的 OneToOne 链接,而不是“扩展”用户模型。这只是因为 User 是一个模型,应该严格用于识别/验证某人。在 User 对象中包含额外的字段(例如身高和体重)并不是最好的选择,因为它与实体没有直接关系。也许^上面实际上是您的意思,但是您说的是“扩展”,所以我只是想澄清一下。但是,是的,在每个新应用程序中,您都会创建一个新的配置文件模型。
    • 我刚刚点击了您附加的链接。是的,这是正确的方法!
    • 非常感谢您!我想我对“扩展”用户模型感到困惑。好的,所以我现在在我的应用程序中创建了一个 Profile 模型,该模型对 User 模型具有 OneToOneField。我现在可以看到在不影响用户对象的情况下更新用户配置文件是如何工作的。再次感谢!
    • OneToOneField 的目的是将 User 链接到 UserProfile。统计数据的存储应该是一个完全独立的模型。像这样:class Stat(models.Model): user_profile = models.ForeignKey(UserProfile) height = models.CharField() ...
    猜你喜欢
    • 1970-01-01
    • 2021-03-04
    • 2022-10-22
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多