python - 无法分配 django.utils.functional.SimpleLazyObject,必须是用户实例

标签 python django django-forms django-views

将 View 中的 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 at/Cannot assign "": "Contact.user"must be a "User"instance because request.user is an object wrapper, not the actual User (which does '还存在)。但是如果我设置 new_contact.user = auth.get_user(request) [基于此处的答案:valueError in modelforms ],即使我将 django.contrib.auth 导入到我的 View 中,它也会返回 NameError 'auth'。这样做的正确方法是什么?谢谢

我的模型是:

from django import forms
from .models import Contact

class SignupForm(forms.ModelForm):
 class Meta:
    model = Contact
    fields = ['name','email','company']

最佳答案

导入语句应该是:

from django.contrib.auth import get_user

以及对 get_user() 的实际调用:

new_contact.user = get_user(request)

仅供引用,引用自 django.contrib.auth source :

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.
    """
    ...

希望对您有所帮助。

关于python - 无法分配 django.utils.functional.SimpleLazyObject,必须是用户实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22769081/

相关文章:

Django:在管理员中维护图像的很棒的插件是什么?

python - 可以使用 Django 表单进行可变数量的输入吗?

iphone - Google Data/OAuth/AppEngine/Python - 正确注册 Web 应用程序

python - CatBoost 可以安装在 Conda 环境中吗?

python - 具有 One Hot Encoded Features 的 Auto-Sklearn 中的特征和特征重要性

python - django 2.1.3 无法访问上下文处理器内容

python - 如何将滚动条应用到 Canvas 中的框架

python - Django 中 URL 引用 PostgreSQL 数据库密码

python - Django:ModelMultipleChoiceField 不选择初始选择

python - 在 Django 中构建动态表单