在 Django 中将主键传递给下一页

在使用 Django 进行表单提交时,用户可以从一个页面输入信息并提交,然后被重定向到另一个页面继续输入信息。在第一个页面保存表单数据时,会生成一个主键用于标识该条数据。但是,在将用户重定向到第二个页面时,如何将这个主键传递过去以便在第二个页面中使用它呢?这正是本文要解决的问题。
在这里插入图片描述

2. 解决方案

解决这个问题的方法有很多种,其中一种最简单的方法是使用 Django 的 request.session 对象。request.session 对象是一个临时存储区,可以存储一些临时数据,这些数据会在用户会话期间一直存在。

具体步骤如下:

  1. 在第一个页面中,在保存表单数据之前,将主键存储在 request.session 对象中:
request.session['event_id'] = form.pk
  1. 在第二个页面中,通过 request.session 对象获取主键:
event_id = request.session.get('event_id')
  1. 然后,就可以将主键值用于第二个页面中的表单预填充或其他操作了。

值得注意的是,request.session 对象中的数据在用户会话结束时就会被清除,因此不适合存储敏感或重要的数据。

代码例子

以下是使用 request.session 对象传递主键的代码示例:

views.py

def add(request):
    if request.method == 'POST':
        form = AddEventForm(request.POST)
        if form.is_valid():
            form.save()
            request.session['event_id'] = form.instance.pk
            return HttpResponseRedirect(reverse('add_person'))

    else:
        form = AddEventForm()

    return render(request, 'add_event.html', {'form': form})


def add_person(request):
    event_id = request.session.get('event_id')

    if request.method == 'POST':
        form = AddPersonForm(request.POST)
        if form.is_valid():
            form.instance.event_id = event_id
            form.save()
            return HttpResponseRedirect(reverse('home'))

    else:
        form = AddPersonForm()

    return render(request, 'add_person.html', {'form': form})

urls.py

from django.urls import path

urlpatterns = [
    path('add_event/', views.add, name='add_event'),
    path('add_person/', views.add_person, name='add_person'),
    path('home/', views.home, name='home'),
]

models.py

class Event(models.Model):
    name = models.CharField(max_length=255)
    date = models.DateField()

    def __str__(self):
        return self.name


class Person(models.Model):
    event = models.ForeignKey(Event, on_delete=models.CASCADE)
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name

templates/add_event.html

{% extends 'base.html' %}

{% block content %}
<h1>Add Event</h1>
<form method="POST">
  {% csrf_token %}
  {{ form.as_p }}
  <input type="submit" value="Save">
</form>
{% endblock %}

templates/add_person.html

{% extends 'base.html' %}

{% block content %}
<h1>Add Person</h1>
<form method="POST">
  {% csrf_token %}
  {{ form.as_p }}
  <input type="submit" value="Save">
</form>
{% endblock %}

通过以上方法,我们就可以将主键从第一个页面传递到第二个页面,并用于预填充表单或其他操作。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值