2015-07-27 1 views
0

Я хочу передать pk из одной формы в другую, чтобы ее можно было использовать как внешний ключ для второй формы. Вот модель:Форма передачи Django в следующую форму

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

Как я должен настройте мое второе представление, чтобы форма сохранила объект, у которого есть внешний ключ для объекта, созданного пихтой в ней?

ответ

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

Если у кого есть лучшее решение, которое я хотел бы услышать его.