Python 使用Django将主键传递到中的下一页
因此,我有以下文件: Views.py:Python 使用Django将主键传递到中的下一页,python,mysql,django,Python,Mysql,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 = Ad
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
表中的外键,我需要使用它在add_people
页面中预填充eventID
我最初认为主键应该在表单保存后的
请求中。POST
,但它不是 使用表单输入作为参数查询表中的主键。获得密钥后,将其作为会话变量传递到请求对象中。以下是对同一问题的回答,但使用基于类的视图而不是基于函数的视图:。在该示例中,外键作为URL中的参数从父页面传递到子页面。子页面将其作为表单参数捕获(在表单的\uuuu init\uuuu
函数中),将其存储在隐藏字段中以供显示(通过视图类的获取上下文数据和表单模板中的html代码),然后将其作为表单的一部分提交。如果表单已验证,然后您必须将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/')