Python 变量can';t be表达式——在django中扩展用户模型

Python 变量can';t be表达式——在django中扩展用户模型,python,django,django-models,Python,Django,Django Models,我意识到有很多更优雅的方法可以做到这一点,我会做到的,但这只是在尝试让所有的工作都先开始。我得到了这个错误: 语法错误位于/accounts/profile/foobar/ 关键字不能是表达式(views.py,第104行) 这是对应的一行。注意:关键字是我在URL中传递的字符串,我使用它来查找用户 user = User.objects.get(username=keyword) up = UserProfile(user=user.id, fullname=

我意识到有很多更优雅的方法可以做到这一点,我会做到的,但这只是在尝试让所有的工作都先开始。我得到了这个错误:

语法错误位于
/accounts/profile/foobar/

关键字不能是表达式(views.py,第104行)

这是对应的一行。注意:关键字是我在URL中传递的字符串,我使用它来查找用户

user = User.objects.get(username=keyword)
up = UserProfile(user=user.id,
                 fullname=result['fullname'],
                 email=result['email'],
                 phone=result['phone'],
                 title=result['title'],
                 department=result['department'],
                 office=result['office'])
我是否没有正确地将
UserProfile
对象映射到
User
对象?添加外键的正确方法是什么?只需传递对象本身?欣赏洞察力和智慧。

易于复制:

>>> def foo(**kwargs):
...   return None
... 
>>> foo(a.b=1)
  File "<stdin>", line 1
SyntaxError: keyword can't be an expression
def foo(**kwargs): ... 一无所获 ... >>>foo(a.b=1) 文件“”,第1行 SyntaxError:关键字不能是表达式 错误消息有点神秘-关键字在哪里?我怀疑这与“.”是getattr的语法有关。

很容易复制:

>>> def foo(**kwargs):
...   return None
... 
>>> foo(a.b=1)
  File "<stdin>", line 1
SyntaxError: keyword can't be an expression
def foo(**kwargs): ... 一无所获 ... >>>foo(a.b=1) 文件“”,第1行 SyntaxError:关键字不能是表达式
错误消息有点神秘-关键字在哪里?我怀疑这与“.”是getattr的语法有关。

为什么要使用
up.office
而不仅仅是
office
?快速复制粘贴并忽略了它。这实际上不是问题所在,但谢谢你看到这一点。@Brian-你确定这不是问题所在吗?在我看来真的很像!这两行中哪一行是104行?(更好的是,将代码更改为将每个赋值放在单独的行上,这样我们就可以找出问题出在哪个赋值上)。如果UserProfile.user是一个ForeignKey,那么正确的做法是传递user对象本身。但是,错误消息听起来并不是你的问题。
up=UserProfile(user=user,**result)
你为什么要使用
up.office
而不仅仅是
office
?快速复制粘贴并忽略了它。这实际上不是问题所在,但谢谢你看到这一点。@Brian-你确定这不是问题所在吗?在我看来真的很像!这两行中哪一行是104行?(更好的是,将代码更改为将每个赋值放在单独的行上,这样我们就可以找出问题出在哪个赋值上)。如果UserProfile.user是一个ForeignKey,那么正确的做法是传递user对象本身。但是,错误消息听起来并不是你的问题。
up=UserProfile(user=user,**result)
这个“关键字”指的是与
kwargs
中的“kw”指的相同的东西,
a.b.
是一个表达式。我认为这个关键字意味着关键字参数的名称,它不能是表达式。也就是说,你不能使用“a.b”或“up.office”作为关键字参数。正如J.F.Sebastian和Adam Bard所指出的,我必须简单地传递整个用户对象。感谢您的测试!JF和Adam指出了一个不同的问题,在修复“关键字不能是表达式”错误之后会出现。正如Space/Ignacio所说,Fixing up.office是你问题标题的真正答案。只是在应该得到信任的地方给予信任:)--编辑:我看到你说这只是一个复制粘贴错误,但是不是用户实例的用户会引发一个完全不同的错误(ValueError),“关键字”指的是与
kwargs
中的“kw”指的相同的东西,
a.b.
是一个表达式。我认为关键字意味着关键字参数的名称,它不能是表达式。也就是说,你不能使用“a.b”或“up.office”作为关键字参数。正如J.F.Sebastian和Adam Bard所指出的,我必须简单地传递整个用户对象。感谢您的测试!JF和Adam指出了一个不同的问题,在修复“关键字不能是表达式”错误之后会出现。正如Space/Ignacio所说,Fixing up.office是你问题标题的真正答案。只是在应该得到信任的地方给予信任:)--EDIT:我看到你说这只是一个复制粘贴错误,但不是用户实例的用户将引发一个完全不同的错误(ValueError)