如何从url中获取id以用于关系数据库?

问题描述:

对不起,如果标题没有意义,但我有点不确定它是什么后。如何从url中获取id以用于关系数据库?

我有一个位置页面列出了所有位置,您可以点击该位置以显示该位置的更多信息,并将该位置的id放入url中。从位置页面我希望能够添加多个评估到该位置。我在评估模型中添加了一对多关系字段,但是会显示一个下拉菜单。如果评估链接是从地点页面点击的,我希望它会自动将评估添加到该地点。

url.py

url(r'^accounts/loggedin/locations/all/$', 'assessments.views.locations'), 
    url(r'^locations/get/(?P<location_id>\d+)/$', 'assessments.views.location'), 
    url(r'^locations/get/(?P<location_id>\d+)/assessments/all/$', 'assessments.views.assessments'), 
    url(r'^locations/get/(?P<location_id>\d+)/assessment1/(?P<assessment1_id>\d+)/$', 'assessments.views.assessment1'), 

modules.py

class Location(model.Models): 
    # some fields on the location 

class Assessment(model.Models): 
    location = models.ForeignKey(Location) 
    assessment1 = models.CharField() 
    assessment2 = models.CharField() 
    assessment3 = models.CharField() 

class Assessment1(model.Models): 
    assessment = models.ForeignKey(Assessment) 
    # some fields in assessment 

ect 

views.py

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

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

def assessments(request): 
    return render_to_response('dashboard/assessments.html', {'assessments': Assessments.objects.all() }) 

def assessments1(request, assessment1_id=1): 
    return render_to_response('dashboard/assessment1.html', {'assessment1': Assessment1.objects.get(id=assessment1_id) }) 

我希望这是有道理的。

感谢

+0

我不明白你为什么需要'Assessment'和一个单独的'Assessment1'模型... – 2014-09-13 15:26:59

+0

多个类别组成一个评估,并且可以有多个相同的类别到一个评估 – 2014-09-13 15:31:07

+0

您应该实施评估类别一个单独的字段与['choices'](https://docs.djangoproject.com/en/dev/ref/models/fields/#choices)设置。这样所有类型的评估都在同一个模型中,它们只是根据它们的类别字段值而不同。 – 2014-09-13 17:50:58

你应该调整你的模式是这样的:

class Location(model.Models): 
    ... 

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

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

,有你的路线更是这样的:

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'), 

然后,它会更容易识别的ID视图中的位置,评估和类别:

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

我想我正在绕着这个完全错误的方向解释它。基本上我想要的是一个简单的一对多关系表,它自动指定评估所属的位置 – 2014-09-13 15:44:23

+0

好的,什么令我困惑的是评估1-2-3实例变量和Assessment1类,为什么你需要那些? – 2014-09-13 15:53:39

+0

评估1-2-3应该是一个大型评估的分类。一个地点可以有很多评估,每个评估都由不同的类别组成。那有意义吗。谢谢你的方式。 – 2014-09-13 16:08:56