Django将密钥传递给下一个表单

时间:2015-07-27 23:42:46

标签: python django forms django-forms

我想将pk从一个表单传递给另一个表单,以便它可以用作第二个表单的外键。以下是模型:

models.py

  class CompanyDetails(models.Model):
    name = models.CharField(max_length=100)

class CompanyDetailsForm(forms.ModelForm):
    class Meta:
        model = CompanyDetails

class DataRequest(models.Model):
    company = models.ForeignKey(CompanyDetails, default="0")
    agency_name = models.CharField(max_length=100)

class DataRequestForm(forms.ModelForm):
    class Meta:
        model = DataRequest
        exclude = ['company']

以下是第一种形式的观点:

views.py

def index(request):
    if request.method == 'POST':
        form = CompanyDetailsForm(request.POST or None)
        if form.is_valid():
            data = form.save(commit=False)
            data.save()
            return HttpResponseRedirect(reverse('canareeform:datarequest',  data.id))
    else:
        form = CompanyDetailsForm()
    return render(request, 'canareeform/index.html', {'form': form})

我应该如何设置第二个视图,以便表单保存一个对象,该对象具有由第一个表单创建的对象的外键?

1 个答案:

答案 0 :(得分:0)

我通过将第一个对象的主键传递给url来实现它。它去了abc.com/form - > abc.com/form/16/datarequest。不是超级理想的,因为通过更改url中的数字,第二个对象将使用其他一些外键。

<强> views.py

def index(request):
    if request.method == 'POST':
        form = CompanyDetailsForm(request.POST or None)
        if form.is_valid():
            data = form.save(commit=False)
            data.save()
            return HttpResponseRedirect(reverse('canareeform:datarequest',  args=(data.id,)))
    else:
        form = CompanyDetailsForm()
    return render(request, 'canareeform/index.html', {'form': form})

def datarequest(request, company_id):

    if request.method == 'POST':
        form = DataRequestForm(request.POST or None)
        if form.is_valid():
            data = form.save(commit=False)
            data.company = CompanyDetails.objects.get(pk=company_id)
            data.save()
            return HttpResponse("Thanks")
    else:
        form = DataRequestForm()
    return render(request, 'canareeform/datarequest.html', {'form': form})

如果有人有更好的解决方案,我很乐意听到。