我的Django表单存在问题,并将其与数据库中的数据结合在一起。
你们有什么建议或输入让我的代码更“安全”吗?目前,我跳过了Django提供的与cleaned_data和is_valid()一起提供的所有安全性。原因是我不知道怎么做。
views.py
from django.shortcuts import render
from .models import Ticket
from tickets.models import Order, Entry
# Create your views here.
def choose_ticket_and_quantity(request):
tickets = Ticket.objects.all()
if request.POST:
o = Order.objects.create()
request.session['order_id'] = o.order_id
ticket_id = request.POST.getlist('ticket_id')
ticket_quantity = request.POST.getlist('ticket_quantity')
for x in range(len(ticket_id)):
if int(ticket_quantity[x]) > 0:
e = Entry(
order=Order.objects.get(order_id = o.order_id),
ticket=Ticket.objects.get(id = ticket_id[x]),
quantity=ticket_quantity[x]
).save()
return render(request, "tickets/choose_ticket_and_quantity.html", {"tickets": tickets})models.py
class Ticket(models.Model):
description = models.TextField()
name = models.CharField(max_length=120)
price_gross = models.DecimalField(max_digits=19, decimal_places=2)
quantity = models.IntegerField()choose_ticket_and_quantity.html
<form action="" method="post">
{% csrf_token %}
{% for ticket in tickets %}
<input type="hidden" name="ticket_id" value="{{ ticket.id }}">
{{ ticket.name }}
<select name="ticket_quantity" >
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
{% endfor %}
<p><input type="submit" value="Checkout"></p>
</form>这里是我目前在forms.py中尝试/启动的内容,但我不知道如何在从其模型中获取票证数据的同时呈现*.html。
from django import forms
#Currently not used
INT_CHOICES = [tuple([x,x]) for x in range(0,11)]
class TicketForm(forms.Form):
ticket_quantity = forms.IntegerField(widget=forms.Select(choices=INT_CHOICES))发布于 2018-03-29 12:28:58
您可以为您的EntryModelForm模型创建一个Entry,然后创建一个FormSet of EntryModelForm。
下面是示例视图函数:
from django.forms import formset_factory
def choose_ticket_and_quantity(request):
tickets = []
for ticket in Ticket.objects.all():
tickets.append({'ticket': ticket})
EntryFormSet = formset_factory(EntryModelForm, extra=0)
formset = EntryFormSet(initial=tickets)
if request.POST:
o = Order.objects.create()
formset = EntryFormSet(request.POST, initial=tickets)
for form in formset:
if form.is_valid():
entry = form.save(commit=False)
entry.order = o
entry.save()
return render(request, "tickets/choose_ticket_and_quantity.html",
{'formset': formset})我想您的入门模型类可能如下所示:
class Entry(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE)
ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)
quantity = models.IntegerField(choices=INT_CHOICES)以下是表单类:
class EntryModelForm(forms.ModelForm):
class Meta:
model=Entry
exclude = ('order',)下面是HTML模板:
<form action="" method="post">
{% csrf_token %}
{{ formset }}
<p><input type="submit" value="Checkout"></p>
</form>https://stackoverflow.com/questions/49545218
复制相似问题