Django:表格无效

时间:2018-05-29 16:36:39

标签: python django forms

我目前正努力让我的表格正常运作。我手动创建了表单(template.html),当我用print(request.POST)(在views.py - checkout中)调用它时,我可以看到所有数据但是form.is_valid():(在views.py中 - checkout )不起作用。表示我的表格无效。

我认为问题在于,我手动创建了表单并将其与我想要的模型表单组合在一起使用form.valid()验证我的数据后保存它。你们中的任何人都可以帮我解决我的问题,为什么它无效?

template.html

<form action="{% url 'checkout:reserve_ticket' %}" method="post">
{% csrf_token %}
{% for ticket in event.tickets.all %}
    <p>
        {{ ticket.name }} for {{ ticket.price_gross }} with quantity:
        <input type="hidden" name="order_reference" value="123456af">
        <input type="hidden" name="ticket" value="{{ ticket.id }}">
        <input type="hidden" name="ticket_name" value="{{ ticket.name }}">
        <input type="number" name="quantity" max="{{ ticket.event.organiser.max_quantity_per_ticket }}" placeholder="0">
    </p>
{% endfor %}
    <button type="submit" class="btn btn-primary">Continue</button>
</form>

models.py

class ReservedItem(models.Model):
    order_reference = models.CharField(
        max_length=10,
        unique=True
    )
    ticket = models.ForeignKey(
        Ticket,
        on_delete=models.PROTECT,
        related_name='reserved_tickets'
    )
    ticket_name = models.CharField(max_length=100)
    quantity = models.IntegerField()
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

forms.py

class ReserveForm(forms.ModelForm):

class Meta:
    model = ReservedItem
    fields = ['order_reference', 'ticket', 'ticket_name', 'quantity']

views.py - events

# Create your views here.
class EventDetailView(DetailView):

    context_object_name = 'event'

    def get_object(self):
        organiser = self.kwargs.get('organiser')
        event = self.kwargs.get('event')
        queryset = Event.objects.filter(organiser__slug=organiser)
        return get_object_or_404(queryset, slug=event)

views.py - 结帐

def reserve_ticket(request):
    if request.method == 'POST':
        form = ReserveForm(request.POST)
        if form.is_valid():
            print("Hello World")
            return redirect("https://test.com")
    else:
        print("back to homepage")

0 个答案:

没有答案