【问题标题】:Cannot assign - must be a "UserProfile" instance无法分配 - 必须是“UserProfile”实例
【发布时间】:2011-02-22 07:36:36
【问题描述】:

我定义了一个class UserProfile,它将默认的user 作为外键。 现在另一个class A 有一个指向UserProfile 的外键。
因此,为了保存 A 类中的任何实例,我如何给它 userprofile 对象。

另外,创建class UserProfile 是否意味着class user 仍在使用而class UserProfile 只是其他表?
我需要知道这一点,因为我必须处理用户配置文件的创建,所以我应该知道什么存储在哪里?

-- 困惑

【问题讨论】:

  • 我应该为class user 本身创建一个外键吗?

标签: django django-models django-authentication django-users


【解决方案1】:

所以为了保存类 A 中的任何实例, 我如何给它用户配置文件 对象。

  1. 使用具有models.OneToOneField(User)models.ForeignKey(User, unique=True) 的模型创建应用程序。
  2. 通过从 settings.py 文件 AUTH_PROFILE_MODULE = 'myapp.UserProfile' 指向用户配置文件,让您的项目了解您的用户配置文件。
  3. 阅读documentation

另外,创建一个类 UserProfile 表示该类用户仍在使用中,并且 类 UserProfile 只是其他一些 桌子?

是的,您的数据库将同时具有 auth_useruser_profile 表。这是因为使用 UserProfiles 并不意味着所有用户都必须拥有配置文件。只有UserProfile 模型中定义的附加字段才会出现在user_profile 表中。

我需要知道这一点,因为我必须接受 关心用户配置文件的创建,所以 我应该知道什么存储在哪里?

James Bennett 创建了两个不错的应用程序,经过几个小时的仔细阅读将有很大帮助,尤其是在用户注册部分。去看看django-registrationdjango-profiles

【讨论】:

  • 谢谢西蒙。我只有一个小疑问 - 所以这意味着用户身份验证仍然可以在任何需要的地方使用普通用户类作为外键来完成,我不应该使用 UserProfile 类,除非我关心“配置文件”!
  • 我认为这是一个设计问题。如果您项目的所有用户都有个人资料,您总是可以导入 UserProfile,但我想只导入用户来创建可重用的应用程序更为常见。在第一个选项中,您的 UserProfile 成为所有其他应用程序的依赖项,这可能是不可取的。
【解决方案2】:

我假设您的 UserProfile 模型旨在存储有关您的用户的其他信息。如果是这样,documentation 是关于执行此操作的最佳方法,简而言之:

  • 定义一个模型,其中包含您想要存储的其他信息或您想要使用的其他方法的字段,并将您的模型中的OneToOneField 添加到用户模型中。这将确保只能为每个用户创建一个模型实例。
  • AUTH_PROFILE_MODULE 设置为myapp.MyModel,其中myapp 是包含模型MyModel 的应用程序,您想用它来存储有关用户的额外信息。

【讨论】:

  • 是的,我已经读到:两件事 - 1. 这是否停止使用 class user(我使用了 User 模型的外键) 2. 可能需要用户信息的任何其他模型应该只对class user 使用外键吗?还是我在 AUTH_PROFILE_MODULE 中设置的新模型会接管?我希望我很清楚。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 2020-12-05
相关资源
最近更新 更多