bhargava.prabu
bhargava.prabu

Reputation: 708

invalid literal for int() with base 10: - django

I am new to Django and trying to pass an program code to a view and filter out courses objects based on the program code. here are the codes:

models.py

class Program(models.Model):
    class Meta:
        verbose_name_plural = 'Program'

    program_code = models.CharField(max_length=10,
                               default='',
                               validators=[MinLengthValidator(1)])

    program_title =  models.CharField(max_length=100,
                               default='',
                               validators=[MinLengthValidator(10)])
class Courses(models.Model):
    class Meta:
        verbose_name_plural = 'Courses'

    program = models.ManyToManyField(Program, blank=False)
    course_code = models.CharField(max_length=10,
                               default='',
                               unique=True,
                               validators=[MinLengthValidator(1)])
    course_title =  models.CharField(max_length=100,
                               default='',
                               validators=[MinLengthValidator(10)])

urls.py:

    urlpatterns = [
    path('',views.programs,name='programs'),
    path('<slug:program_code_no>/',views.courses,name='courses'),
]

views.py

def programs(request):

    obj = Program.objects.all()
    paginator = Paginator(obj,20)
    page = request.GET.get('p', 1)
    list = paginator.get_page(page)
    all_details={
        'lists': list,
    }
    return render(request,'courses/programs/index.html',context=all_details)

def courses(request,program_code_no):

    obj = Courses.objects.filter(program=program_code_no)
    paginator = Paginator(obj,20)
    page = request.GET.get('p', 1)
    list = paginator.get_page(page)
    all_details={
        'lists': list,
    }
    return render(request,'courses/courses/index.html',context=all_details)

However, I get this error when I try to get http://127.0.0.1:8000/programs/P132/ ('P132' is a program_code object, already created)

ValueError at /programs/P132/

invalid literal for int() with base 10: 'P132'

Request Method: GET
Request URL:    http://127.0.0.1:8000/programs/P132/
Django Version: 2.2.1
Exception Type: ValueError
Exception Value:    

invalid literal for int() with base 10: 'P132'

Exception Location: C:\Users\Prabu\Anaconda3\envs\codeforcoder\lib\site-packages\django\db\models\fields\__init__.py in get_prep_value, line 966
Python Executable:  C:\Users\Prabu\Anaconda3\envs\codeforcoder\python.exe
Python Version: 3.7.4
Python Path:    

['C:\\Users\\Prabu\\Desktop\\Django codeforcoder\\codeforcoder '
 'v1.0.1\\codeforcoder',
 'C:\\Users\\Prabu\\Anaconda3\\envs\\codeforcoder\\python37.zip',
 'C:\\Users\\Prabu\\Anaconda3\\envs\\codeforcoder\\DLLs',
 'C:\\Users\\Prabu\\Anaconda3\\envs\\codeforcoder\\lib',
 'C:\\Users\\Prabu\\Anaconda3\\envs\\codeforcoder',
 'C:\\Users\\Prabu\\Anaconda3\\envs\\codeforcoder\\lib\\site-packages']

Upvotes: 0

Views: 73

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476624

You need to filter on the program_code of the related program, so:

def courses(request,program_code_no):
    obj = Courses.objects.filter(program__program_code=program_code_no)
    paginator = Paginator(obj,20)
    pagenum = request.GET.get('p', 1)
    page = paginator.get_page(pagenum)
    all_details={
        'lists': page,
    }
    return render(request,'courses/courses/index.html',context=all_details)

Upvotes: 2

Related Questions