2014-09-09 1 views
0

Поэтому у меня есть следующие файлы:Передача Первичный ключ к следующей странице с Django

views.py:

def home(request): 
    return render(request, 'home/index.html') 

def add(request): 
    if request.method == 'POST': # If the form has been submitted... 
     # ContactForm was defined in the previous section 
     form1 = AddEventForm(request.POST) # A form bound to the POST data 
     #person = AddPersonForm(request.POST) # A form bound to the POST data 
     if form1.is_valid(): # All validation rules pass 
      form = form1.save() 
      request.session['event_data'] = request.POST 
      #request.session['event_data2'] = form 
      return HttpResponseRedirect('/add_person/') 
      #return HttpResponseRedirect(reverse('/add_person', kwargs={'PK':form.pk})) 
    else: 
     form1 = AddEventForm() # An unbound form 
     person = AddPersonForm() # A form bound to the POST data 

    return render(request, 'add/add.html', { 
     'form1': form1, 'person': person, 
    }) 


def add_person(request): 

    event_data = request.session.get('event_data') 
    if request.method == 'POST': 
     person = AddPersonForm(request.POST) 
    else: 
     person = AddPersonForm() 

    return render(request, 'add_person/add_person.html',{'event_data': event_data, 'person': person,}) 

models.py:

class event(models.Model): 
    event_name = models.CharField(max_length=200) 
    date = models.DateField('Date',default=date.today) 
    event_id = models.AutoField(primary_key=True) 
    admin_username = models.CharField(max_length=50) 

    def __unicode__(self): 
     return ('%s %s %d') % (self.date, self.event_name, self.event_id) 

class Person(models.Model): 
    eventID = models.ForeignKey(event) 
    first_name = models.CharField(max_length=50) 
    second_name = models.CharField(max_length=50) 
    email = models.EmailField(max_length=50) 
    phone = models.CharField(max_length=25) 
    company = models.CharField(max_length=200) 
    favourite = models.BooleanField(default=False) 

    def __unicode__(self): 
     return eventID 

Эта проблема имеет время от времени беспокоило меня. У меня есть начальная страница, где пользователь вводит некоторую информацию о событии. Если проверка проходит, форма сохраняет и генерируется первичный ключ. Затем пользователь перенаправляется на другую страницу, где заполняет форму о людях, которых они там встречали. Проблема в том, что я не могу найти способ передачи первичного ключа на вторую страницу (add_people). Мне нужен первичный ключ, потому что это мой внешний ключ в моей таблице Person, и мне нужно использовать, чтобы предварительно заполнить eventID на странице add_people.

Первоначально я думал, что первичный ключ будет в request.POST после сохранения формы, но его нет.

ответ

0

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

0

Вот ответ на тот же вопрос, но с классами, а не на основе функций: How do I pass a parent id as an fk to child object's ModelForm using generic class-based views in Django?. В этом примере внешний ключ передается с родительской страницы на дочернюю страницу, являясь параметром в URL-адресе. Детальная страница ловит его как параметр формы (в функции __init__ формы), сохраняет его в скрытом поле для отображения (по окну get_context_data и HTML-код вида в шаблоне формы), а затем представляет его как часть формы.

0

Если форма утверждена, то ваш должны установить session значение, как eventID но не request.POST

if form1.is_valid(): # All validation rules pass 
    form1.save(commit=False) 
    request.session['event_data'] = form1.cleaned_data['eventID'] 
    form1.save() 
    return HttpResponseRedirect('/add_person/') 
Смежные вопросы