【发布时间】:2021-11-18 07:00:48
【问题描述】:
如何将几个变量传递/重定向到新视图,但我想在场景下而不是在 URL 中。
models.py
class Parings_3(models.Model):
name = models.CharField(max_length=64)
p1 = models.CharField(max_length=16, choices=ARMIES_CHOICE)
p2 = models.CharField(max_length=16, choices=ARMIES_CHOICE)
p3 = models.CharField(max_length=16, choices=ARMIES_CHOICE)
op1 = models.CharField(max_length=16, choices=ARMIES_CHOICE)
op2 = models.CharField(max_length=16, choices=ARMIES_CHOICE)
op3 = models.CharField(max_length=16, choices=ARMIES_CHOICE)
p11 = models.IntegerField()
p12 = models.IntegerField()
p13 = models.IntegerField()
p21 = models.IntegerField()
p22 = models.IntegerField()
p23 = models.IntegerField()
p31 = models.IntegerField()
p32 = models.IntegerField()
p33 = models.IntegerField()
date = models.DateField(auto_now_add=True)
forms.py
class ParingsForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ParingsForm, self).__init__(*args, **kwargs)
for i in ["p11", "p12", "p13", "p21", "p22", "p23", "p31", "p32", "p33"]:
self.fields[i].widget.attrs["min"] = -2
self.fields[i].widget.attrs["max"] = 2
class Meta():
model = Parings_3
fields = ["name", "p1", "p2", "p3", "op1", "op2", "op3", "p11", "p12", "p13", "p21", "p22", "p23", "p31", "p32", "p33"]
views.py
class AddParing3View(View):
def get(self, request):
form = ParingsForm()
ctx = {"form": form}
return render(request, "add_paring_3_form.html", ctx)
def post(self, request):
form = ParingsForm(request.POST)
if form.is_valid():
form.save()
return redirect("parings-view")
class ParingDetails3View(View):
def get(self, request, id):
player = Parings_3.objects.get(pk=id)
teamA = [player.p1, player.p2, player.p3]
teamB = [player.op1, player.op2, player.op3]
ctx = {
"teamA": teamA,
"teamB": teamB,
"player": player
}
return render(request, "paring_details_3.html", ctx)
带有会话的views.py
class AddParing3View(View):
def get(self, request):
if request.session["teamA3"]:
teamA = request.session['teamA3']
form = ParingsForm(initial={
"p1": teamA[0],
"p2": teamA[1],
"p3": teamA[2],
})
ctx = {"form": form}
return render(request, "add_paring_3_form.html", ctx)
else:
form = ParingsForm()
ctx = {"form": form}
return render(request, "add_paring_3_form.html", ctx)
def post(self, request):
form = ParingsForm(request.POST)
if form.is_valid():
form.save()
return redirect("parings-view")
class ParingDetails3View(View):
def get(self, request, id):
player = Parings_3.objects.get(pk=id)
teamA = [player.p1, player.p2, player.p3]
teamB = [player.op1, player.op2, player.op3]
request.session['teamA3'] = teamA
ctx = {
"teamA": teamA,
"teamB": teamB,
"player": player
}
return render(request, "paring_details_3.html", ctx)
模板
<button type="button" class="btn btn-color rounded-1 pt-1 pb-1">
<a class="nav-link btn-color" href="{% url 'add-paring-3' %}">Next</a>
</button>
<button type="button" class="btn btn-color rounded-1 pt-1 pb-1">
<a class="nav-link btn-color" href="{% url 'add-paring-3' %}">New</a>
</button>
urls.py
path("paring_3/<int:id>/", ParingDetails3View.as_view(), name="paring-details-3"),
path("add_paring_3/", AddParing3View.as_view(), name="add-paring-3"),
我想做什么。 用户创建的 Paring 并在 ParingsDetailsView 中。 当用户单击“新建”按钮时,他将被重定向到查看 AddParing3View 当用户单击“下一步”按钮时,他将被重定向到查看 AddParing3View,但有一些数据,他已经在表单 (p1, p2, p3) 中提交并用这些数据填写新表单。
我已经尝试过会话,但即使我点击“新”,它也会“传递”数据。
有没有简单的方法来传递这 3 个变量?
【问题讨论】: