[Answer]-How to get id from url to use in relationship database?

1👍

✅

You should restructure your models like this:

class Location(model.Models):
    ...

class Assessment(model.Models):
    location = models.ForeignKey(Location)
    ...

class Category(model.Models):
    assessment = models.ForeignKey(Assessment)
    ...

And have your routes be more like this:

url(r'^locations/$', 'views.locations'),
url(r'^locations/(?P<location_id>\d+)$', 'views.location'),
url(r'^locations/(?P<location_id>\d+)/assessments$', 'views.assessments'),
url(r'^locations/(?P<location_id>\d+)/assessments/(?P<assessment_id>\d+)$', 'views.assessment'),
url(r'^locations/(?P<location_id>\d+)/assessments/(?P<assessment_id>\d+)/categories$', 'views.categories'),

Then it will be much easier identifying the ids of the locations, assessments and categories in the views:

def locations(request):
    locations = Location.objects.all()
    return render_to_response('dashboard/locations.html', {'locations': locations})

def location(request, location_id):
    location = Location.objects.get(pk=location_id)
    return render_to_response('dashboard/location.html', {'location': location})

def assessments(request, location_id):
    location = Location.objects.get(pk=location_id)
    assessments = Assessment.objects.filter(location=location)
    return render_to_response('dashboard/assessments.html', {'assessments': assessments})

def assessment(request, location_id, assessment_id):
    location = Location.objects.get(pk=location_id)
    assessment = Assessment.objects.get(pk=assessment_id, location=location)
    return render_to_response('dashboard/assessment.html', {'assessment': assessment})

def categories(request, location_id, assessment_id):
    location = Location.objects.get(pk=location_id)
    assessment = Assessment.objects.get(pk=assessment_id, location=location)
    categories = Category.objects.filter(assessment=assessment)
    return render_to_response('dashboard/categories.html', {'categories': categories})

Leave a comment