如何在 django 中更新 userProfile 中的字段
当我尝试将数据保存到我的 UserProfile 中的字段时,Django 会引发类型错误。
我认为我正确扩展了 UserProfile。
我的 userProfile 模型:
class UserProfile(models.Model):
user = models.OneToOneField(User, unique=True, related_name='profile')
....
initials = models.CharField(max_length=5)
User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
在我的设置中添加了:
AUTH_PROFILE_MODULE = 'timepiece.UserProfile'
当我运行应将值插入到从 User 继承的字段中的测试时,我收到 TypeError:
(erp)BAir:website jorrit$ ./manage.py test timepiece.PivotalTest.test_update_users
Creating test database for alias 'default'...
E
======================================================================
ERROR: test_update_users (timepiece.tests.pivotal.PivotalTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/jorrit/virtualenvs/erp/erp/apps/timepiece/tests/pivotal.py", line 73, in test_update_users
UserProfile.sync_pivotal_users(self.tracker, 450001)
File "/Users/jorrit/virtualenvs/erp/erp/apps/timepiece/models.py", line 44, in sync_pivotal_users
initials = m.initials,)
File "/Library/Python/2.7/site-packages/django/db/models/base.py", line 365, in __init__
raise TypeError("'%s' is an invalid keyword argument for this function" % kwargs.keys()[0])
TypeError: 'username' is an invalid keyword argument for this function
----------------------------------------------------------------------
Ran 1 test in 1.857s
The function that is test:
def sync_pivotal_users(tracker, project_id):
members = tracker.get_memberships_project(project_id)
for m in members:
#check if member exist in db
try:
#to know if m.id exists in current db
UserProfile.objects.get(pivotal_member_id=m.id)
#if not then create a new user
except UserProfile.DoesNotExist:
u = UserProfile(pivotal_member_id = m.id,
username = m.name, #code breaks here
email = m.email, # and here
initials = m.initials,)
u.save()
When i try to save data to fields in my UserProfile Django raises an typeerror.
I thought that i extended the UserProfile correctly.
My userProfile model:
class UserProfile(models.Model):
user = models.OneToOneField(User, unique=True, related_name='profile')
....
initials = models.CharField(max_length=5)
User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
In my settings i have added:
AUTH_PROFILE_MODULE = 'timepiece.UserProfile'
When i run a test which should insert values into inherited fields from User, i get an TypeError:
(erp)BAir:website jorrit$ ./manage.py test timepiece.PivotalTest.test_update_users
Creating test database for alias 'default'...
E
======================================================================
ERROR: test_update_users (timepiece.tests.pivotal.PivotalTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/jorrit/virtualenvs/erp/erp/apps/timepiece/tests/pivotal.py", line 73, in test_update_users
UserProfile.sync_pivotal_users(self.tracker, 450001)
File "/Users/jorrit/virtualenvs/erp/erp/apps/timepiece/models.py", line 44, in sync_pivotal_users
initials = m.initials,)
File "/Library/Python/2.7/site-packages/django/db/models/base.py", line 365, in __init__
raise TypeError("'%s' is an invalid keyword argument for this function" % kwargs.keys()[0])
TypeError: 'username' is an invalid keyword argument for this function
----------------------------------------------------------------------
Ran 1 test in 1.857s
The function which is tested:
def sync_pivotal_users(tracker, project_id):
members = tracker.get_memberships_project(project_id)
for m in members:
#check if member exist in db
try:
#to know if m.id exists in current db
UserProfile.objects.get(pivotal_member_id=m.id)
#if not then create a new user
except UserProfile.DoesNotExist:
u = UserProfile(pivotal_member_id = m.id,
username = m.name, #code breaks here
email = m.email, # and here
initials = m.initials,)
u.save()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
文档中概述的方法背后的想法< /a> 是当创建一个新的
User
对象时,您附加一个处理程序,该处理程序又创建一个UserProfile
对象:因此在通过成员的循环中,您应该创建
User
对象,而不是UserProfile
对象,因为它们将通过信号自动创建。目前尚不清楚如何获取密码(注册过程),但是一旦获得密码,您可以使用以下命令更新该用户的个人资料
The idea behind the approach outlined in the documentation is that when a new
User
object is created, you attach a handler that in turn creates aUserProfile
object:so in your loop through members, you should be creating
User
objects, notUserProfile
objects, as they will automatically be created via the signal.It's not really clear how you are getting passwords (the sign up process), but once you have those, you can update the profile for that user using