将变量添加到foreignkey表单

时间:2014-09-18 10:51:55

标签: python django

尝试将父字段的id添加到表单中的子外键字段。 用户有一个位置列表。从该位置,他们可以添加对该位置的评估。而不是评估表给我一个所有位置的列表,我希望它自动选择正确的

urls.py

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

models.py

class Location(models.Model):
    address = models.CharField()

    def __unicode__(self):
        return u'%s' % self.address

class Assessment(models.Model):
    location = models.ForeignKey(Location)
    title = models.CharField()

    def __unicode__(self):
        return u'%s' % self.location

views.py

def create_assessment(request, location_id):
    location = Location.objects.get(pk=location_id)
    if request.POST:
        form = AssessmentForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()

            return HttpResponseRedirect('/accounts/loggedin/assessments/all/')
    else:
        form = AssessmentForm()

    args = {}
    args.update(csrf(request))

    args['form'] = form

    return render_to_response('assessment/create_assessment.html', args,)

forms.py

class LocationForm(forms.ModelForm):

    class Meta:
        model = Location

class AssessmentForm(forms.ModelForm):

    class Meta:
        model = Assessment

2 个答案:

答案 0 :(得分:0)

您可以使用评估实例初始化表单。请参阅https://docs.djangoproject.com/en/1.7/topics/forms/modelforms/#modelform

assessment = Assessment(location=location)
form = AssessmentForm(request.POST, request.FILES, instance=assessment)

然后,当然,您应该从AssessmentForm删除位置字段。

答案 1 :(得分:0)

您的视图包含需要显示评估的位置信息。 您可以通过在呈现表单之前设置位置值来将位置字段添加为自动选择。

location = Location.objects.get(pk=location_id)
form.location = location

如果您需要位置字段不可编辑,请按this link

相关问题