python - Django 表单不呈现
问题描述
我的 Django 表单没有呈现,项目中的其他表单没有问题,我只是迷路了
该表单应该显示在模板文件 product_review.html 中,然后通过 {% include %} 显示到 products.html
我想我应该指出这是一个单独的 Django 应用程序
我的模型:
from django.db import models
from django.conf import settings
from ecommerce.models import Item
STAR_CHOICES = (
('0','0'),
('1','1'),
('2','2'),
('3','3'),
('4','4'),
('5','5'),
)
# Create your models here.
class Review(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
title = models.CharField(max_length=40, blank=True, null=True)
timestamp = models.DateTimeField(auto_now_add=True)
review_content = models.CharField(max_length=300,blank=True, null=True)
star_score = models.CharField(choices=STAR_CHOICES, max_length=1)
item = models.ForeignKey('ecommerce.Item', on_delete=models.CASCADE)
def __str__(self):
return self.user.username
我的表格:
from django import forms
from ecommerce.models import Item
from .models import Review
STAR_CHOICES = (
('0','0'),
('1','1'),
('2','2'),
('3','3'),
('4','4'),
('5','5'),
)
class AddReviewForm(forms.ModelForm):
title = forms.CharField(required=True)
star_score = forms.ChoiceField( widget=forms.RadioSelect, choices=STAR_CHOICES)
review_content = forms.CharField(widget=forms.Textarea(attrs={
'rows': 4
}))
class Meta:
model = Review
fields = '__all__'
exclude = ['user','timestamp','item']
我的观点:
from django.shortcuts import render, get_object_or_404
from .models import Review
from .forms import AddReviewForm
from ecommerce.models import Item
from django.shortcuts import redirect
# Create your views here.
def AddProductReviewView(View):
def post(self, request, *args, **kwargs):
item = get_object_or_404(Item, slug=slug)
form = AddReviewForm(self.request.POST or None)
if request.method == "POST"
if form.is_valid():
form.instance.user = request.user
form.instance.item = item
form.save()
return redirect(reverse("ecommerce:product", kwargs={
'slug':slug
}))
context = {
'form':form
'item':item
}
return render(self.request,'product_review.html')
解决方案
您的视图应该是一个类,并且它需要提供一个get
包含您的表单的方法,以便在您第一次查看页面时显示它;
# Create your views here.
class AddProductReviewView(View):
def get(self, request, *args, **kwargs):
context = {
'form': AddReviewForm()
}
return render(self.request, 'product_review.html', context)
def post(self, request, *args, **kwargs):
slug = kwargs.get('slug')
item = get_object_or_404(Item, slug=slug)
form = AddReviewForm(self.request.POST or None)
if form.is_valid():
form.instance.user = request.user
form.instance.item = item
form.save()
return redirect(reverse("ecommerce:product", kwargs={
'slug': slug
}))
context = {
'form': form
'item': item
}
return render(self.request,'product_review.html')
推荐阅读
- docker - cassandra 集群是否需要在 docker-compose 文件上进行额外配置才能连接单个集群上的三个节点?
- r - 在第二个空格后选择字符串
- java - 将可绘制文件夹中的图像显示为画廊视图,以便从中进行选择
- angular - 下拉列表中的自动完成搜索不起作用(Angular 12)
- json - Perl LWP::UserAgent 解析响应 JSON
- javascript - 插件中的全局 Vue 组件导致内存泄漏?
- javascript - JavaScript:在导入中作为 es-module 地址的绝对 URL
- javascript - JS FormData 将文件作为 application/ocet-stream 发送,如何将其设置为 multipart/form-data?
- sql - 更改列类型删除无法转换的列类型
- makefile - 下面的makefile是什么意思?