如何在 django 中使用单个表单重定向到不同页面

问题描述 投票:0回答:1

我试图设计一个表单,可用于根据所选类别字段将用户重定向到相应的页面。我是 django 的新手,我不确定错误在哪里。因此,我共享所有四个文件,即模型、视图、表单和模板(网址正确)。

模型.py

from django.db import models
from autoslug import AutoSlugField
# Create your models here.
class Category(models.Model):
    name = models.CharField(max_length = 80, null = False, blank = False)
    slug = AutoSlugField(populate_from = 'name', unique = True)

    class Meta:
        verbose_name = 'Category'
        verbose_name_plural = 'Categories'

    def __str__(self):
        return self.name

class Pdf(models.Model):
    pdf = models.FileField(upload_to="pdfs/")
    category = models.ForeignKey(
        Category, related_name = 'pdftools',
        on_delete = models.SET_NULL,
        blank = True,
        null = True
        )
    
    def __str__(self):
        return f"{self.pdf}"

views.py

from django.shortcuts import render, redirect, get_object_or_404
import forms
from django.contrib import messages
# from .models import Category
# from django.http import HttpResponseRedirect, HttpResponse
# from django.urls import reverse

# Create your views here.
def linkview(request):
    return render(request, 'Link.html')

def emailview(request):
    return render(request, 'Emails.html')

def textview(request):
    return render(request, 'Text.html')

def pdfUploadView(request):
    if request.method == 'POST':
        form = forms.UploadPdfForm(request.POST, request.FILES)
        if form.is_valid():
            category = form.cleaned_data['category']
            form.save()
            messages.success(request, "File uploaded successfully!!")
            # return HttpResponse('The file is saved!')


            if category == 'Link':
                return redirect('link')
            elif category == 'Emails':
                return redirect('emails')
            elif category == 'Text':
                return redirect('text')
    else:
        form = forms.UploadPdfForm()
    
    return render(request, 'UploadPdf.html', {'form':form})

上传Pdf.html

{% extends 'base.html' %}

{% block content %}
<div class="row justify-content-center my-5">
    <div class="col-md-5">
        <div class="shadow p-3 mt-4 p-5 bg-dark text-white rounded mb-3">
            <center><h1>PdfXtract</h1></center>
        </div>
        <div class="card">

            <div class="shadow p-3 card-body">

                <form method = 'post' action="{% url 'UploadPdf' %}" enctype = 'multipart/form-data'>
                    {% csrf_token %}
                    {{form.as_p}}
                    <input type="submit" value = "Submit">
                </form>
            </div>
            
        </div>
    </div>
</div>
{% endblock content %}

forms.py

from .models import Pdf
from django.forms import ModelForm

class UploadPdfForm(ModelForm):
    class Meta:
        model = Pdf
        fields = ('category','pdf')

我期望在选择表单中的值时进入不同的页面。例如:-“电子邮件”应该将我带到 Emails.html(在网址中名为“电子邮件”)。但上传文件后,我停留在同一页面并继续不必要地上传它们。

python-3.x django django-forms
1个回答
0
投票
category = form.cleaned_data['category']

这里的category是类别对象的id。不是文字。

catg=Category.Objects.get(id=category) 
if catg.name == 'Link':
    return redirect('link')

我不会说这段代码 100% 有效。但这足以弄清楚。

© www.soinside.com 2019 - 2024. All rights reserved.