你好,我是django初学者,遇到了困难时期,有人可以帮我吗,我不知道我做错了什么吗? 我正在尝试创建一个表单,并使用form.save()通过它保存一些数据。而且我也是新来的,所以不要介意任何错误。
这是我的模特:
from django.db import models
from stores.models import Store
class Category(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=30)
def __str__(self):
return self.name
class Product(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=30)
price = models.DecimalField(max_digits=5, decimal_places=5)
image = models.ImageField(upload_to='upload_to/')
category = models.ForeignKey(Category, default='Default', on_delete=models.CASCADE, blank=False, null=False)
store = models.ForeignKey(Store, on_delete=models.CASCADE, blank=False, null=False)
这是我的观点:
from django.shortcuts import render, redirect
from .forms import NewPro
def pro(request):
if request.method == 'POST':
form = NewPro(request.POST)
if form.is_valid():
form.save()
return redirect('stores_list')
else:
form = NewPro()
return render(request, "default/add_product.html", {'form': form})
def product_list(request):
return render(request, 'default/product_list.html')
这是我的表格:
from django import forms
from .models import Product
class NewPro(forms.ModelForm):
class Meta:
model = Product
fields = ('name', 'price', 'image','category', 'store',)
default / add_product.html:
{% extends 'default/base.html' %}
<html>
<head><title>E-Commerce App</title></head>
{% block content %}
<h1>Add Product details</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Add Product</button>
</form>{% endblock %}
</html>
Settings.py设置
MEDIA_ROOT = '/home/saifi/Saif_project/final_project/MEDIA_ROOT/upload_to'
答案 0 :(得分:2)
我可以在视图中看到一些缩进问题-但我想这只是在复制到Stackoverflow中时的格式。
form.is_valid()
检查将验证您所有的表单字段,并且仅在所有输入字段均有效时才写入数据库。如果没有保存,我首先要检查的是表格错误。
在模板中,您可以使用{{form.errors}}
来显示错误,并且它将列出每个字段和错误。
答案 1 :(得分:1)
您的缩进是错误的,否则应为第一个'if'
def pro(request):
form = NewPro()
if request.method == 'POST':
form = NewPro(request.POST)
if form.is_valid():
form.save()
return redirect('stores_list')
else:
form = NewPro()
return render(request, "default/add_product.html", {'form': form})
答案 2 :(得分:1)
您在request.FILES
视图功能中忘记了pro
,毕竟您有一个图像文件。
def pro(request):
if request.method == 'POST':
form = NewPro(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('stores_list')
else:
form = NewPro()
return render(request, "default/add_product.html", {'form': form})
尝试以这种方式使用表单:
<form action="YOUR_URL_HERE" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Add Product</button>
</form>
我希望这会有所帮助。欢迎登机;)