无法分配django.utils.functional.SimpleLazyObject,必须是用户实例
在视图中,如何正确地将一个来自django.contrib.auth.models的用户对象分配给一个有外键指向用户的模型对象呢?比如说,新的联系人对象new_contact:
def index(request):
form = SignupForm(request.POST or None)
if form.is_valid():
new_contact = form.save(commit=False)
new_contact.user = request.user
new_contact.save()
# send_mail ...
return HttpResponseRedirect(reverse('app:template'))
else:
return render_to_response('index.html', {'form': form}, context_instance=RequestContext(request))
当我尝试用"new_contact.user = request.user"时,出现了错误:ValueError,提示“不能分配空值:'Contact.user'必须是一个'User'实例,因为request.user是一个对象包装,而不是实际的用户(这个用户还不存在)”。但是如果我用new_contact.user = auth.get_user(request)来设置(这个方法是根据这里的回答:modelforms中的valueError),却返回了NameError 'auth',尽管我已经在视图中导入了django.contrib.auth。那我该怎么做呢?谢谢!
我的模型表单是:
from django import forms
from .models import Contact
class SignupForm(forms.ModelForm):
class Meta:
model = Contact
fields = ['name','email','company']
2 个回答
0
你这里缺少了一步。你说用户还不存在,但其实是因为你没有任何代码来创建这个用户。你需要自己去做这件事——这不会自动帮你完成。
最好的方法是从现有的 UserCreationForm(在 contrib.auth.forms 里面)继承一个新的类,然后在这个类里添加你需要的字段。
8
导入语句应该是:
from django.contrib.auth import get_user
然后实际调用 get_user()
的方式是:
new_contact.user = get_user(request)
顺便提一下,来自 django.contrib.auth
的引用 源代码:
def get_user(request):
"""
Returns the user model instance associated with the given request session.
If no user is retrieved an instance of `AnonymousUser` is returned.
"""
...
希望这些对你有帮助。