我试图设计一个表单,可用于根据所选类别字段将用户重定向到相应的页面。我是 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(在网址中名为“电子邮件”)。但上传文件后,我停留在同一页面并继续不必要地上传它们。
category = form.cleaned_data['category']
这里的category是类别对象的id。不是文字。
catg=Category.Objects.get(id=category)
if catg.name == 'Link':
return redirect('link')
我不会说这段代码 100% 有效。但这足以弄清楚。