user2161650
user2161650

Reputation:

'NoneType' object has no attribute 'strftime'

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

Upvotes: 2

Views: 20235

Answers (3)

karthikr
karthikr

Reputation: 99620

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})

Upvotes: 0

J. Ghyllebert
J. Ghyllebert

Reputation: 2027

Try using the get_object_or_404() function:

def when(request):
    user = request.user  
    report = get_object_or_404(Report, user=user) #no need to use the id
    settings = get_object_or_404(Settings, user=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})

Upvotes: 0

7stud
7stud

Reputation: 48599

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

Upvotes: 1

Related Questions