'NoneType' object has no attribute 'strftime'

12,991

Solution 1

You would have to handle the check for both report and report.manual_date for None

Try this:

def when(request):
    user = request.user
    date = None  
    try:
        report = Report.objects.get(user=user)
    except:
        report = None
    settings = Settings.objects.get(user=user)
    settingsForm = SettingsForm(instance=settings)
    reportform = ReportForm()
    if report and report.manual_date:
        if settings.date_format == '0':
            date = report.manual_date.strftime('%d/%m/%Y')             
        else:
            date = report.manual_date.strftime('%m/%d/%Y')        
        reportform = ReportForm(instance=report)

    if request.method == 'POST':            
        reportform = ReportForm(request.POST)
        if report:
            reportform = ReportForm(request.POST,instance=report)

        if reportform.is_valid():
            report = reportform.save(commit=False)
            report.user = request.user
            report.save()
            return redirect('/member/media/')
    reportform = ReportForm(instance=report,initial={'manual_date':date})

Solution 2

I don't know how to logically handle this

manual_date = report.manual_date

if (manual_date):
    format =  (settings.date_format == "0") ? '%d/%m/%Y' : '%m/%d/%Y'
    date = manual_date.strftime(format)

else:
   #No report.manual_date
Share:
12,991
Admin
Author by

Admin

Updated on June 04, 2022

Comments

  • Admin
    Admin almost 2 years

    views.py

    def when(request):
        user = request.user  
        try:
            report = Report.objects.get(user=user.id)
        except:
            report = None
        settings = Settings.objects.get(user=request.user)
        settingsForm = SettingsForm(instance=settings)
        if settings.date_format == '0':
            date = report.manual_date.strftime('%d/%m/%Y')             
        else:
            date = report.manual_date.strftime('%m/%d/%Y')        
           reportform = ReportForm(instance=report)
        if request.method == 'POST':
            reportform = ReportForm(request.POST,instance=report)
            if reportform.is_valid():
                report = reportform.save(commit=False)
                report.user = request.user
                report.save()
                return redirect('/member/media/')
        reportform = ReportForm(instance=report,initial={'manual_date':date})
    

    The above code is used to convert and show the date format.Initially,i hard coded the value in database and checked about format change.Now,for 1st time,for new record in database,it is giving this error "'NoneType' object has no attribute 'strftime'"

    I don't know how to logically handle this.Need your help.

    Thanks

  • 7stud
    7stud almost 11 years
    "Most likely your report object is None". No. If that were the case, the error message would say "NoneType object has no attribute manual_date".
  • karthikr
    karthikr almost 11 years
    thanks.. but the code would not work if report is None anyways.. I edited it now.