【问题标题】:'NoneType' object has no attribute 'user' Django'NoneType' 对象没有属性 'user' Django
【发布时间】:2018-12-25 13:35:16
【问题描述】:

当我提交表单时,我得到一个 AttributeError: 'NoneType' object has no attribute 'user' 请帮助我解决这个问题

我的表单.py

class resume_upload(forms.ModelForm):
    cv = forms.FileField(required = True)
    job_title = forms.CharField(required = True)

    def save(self, commit=False):
       cvs = super(resume_upload, self).save(commit=False)
       cvs.cv = self.cleaned_data['cv']
       cvs.job_title = self.cleaned_data['job_title']

       if commit:
           cvs.save()


    class Meta:
        model = Cv
        fields = ('cv', 'job_title',)

我的模型.py

class Cv(models.Model):
     user = models.OneToOneField(User, on_delete=models.CASCADE)
     cv = models.FileField(upload_to='cvs', default='', validators=[validate_file_extension])
     job_title = models.CharField(max_length=100, default='')

    def __str__(self):
        return self.job_title

还有我的观点.py

def upload_resume(request):
    if request.method == 'POST':
        form = resume_upload(request.POST, request.FILES)
        if form.is_valid():
            cv_form = form.save() # commit is False in this case.
            cv_form.user = request.user
            form.save(commit=True)
            return redirect('/')
        else:
            messages.error(request,"Oops! That didn't work. Please try again")
    else:
        form = resume_upload()
    return render(request, 'upload_resume.html',{'form':form,})

【问题讨论】:

  • 您的视图缩进错误。请解决这个问题。
  • 是的,那是我在这里写代码的时候

标签: python django


【解决方案1】:

当您以这种方式设置字段时,您隐藏了您的用户字段,因此当您尝试将request.user 传递给它时,他们无法在您的表单中找到属性用户

class Meta:
    model = Cv
    fields = ('cv', 'job_title', 'user')

【讨论】:

  • 谢谢,但我用上一个答案修复了它
【解决方案2】:

当您在您的 ModelForm resume_upload(forms.ModelForm) 中覆盖 save() 方法时,您需要返回对象:

def save(self, commit=False):
    cvs = super(resume_upload, self).save(commit=False)
    cvs.cv = self.cleaned_data['cv']
    cvs.job_title = self.cleaned_data['job_title']

    if commit:
        cvs.save()

    return cvs

【讨论】:

    猜你喜欢
    • 2016-10-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 2018-02-11
    • 2014-10-24
    相关资源
    最近更新 更多