[英]Django ModelForm not saving data that is added to request.POST or through form.save(commit=False)
[英]Django ModelForm not saving data to database, Form.save is not working?
您好,我是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'
我可以在視圖中看到一些縮進問題-但我想這只是在復制到Stackoverflow中時的格式化。
form.is_valid()
檢查將驗證您所有的表單字段,並且僅在所有輸入字段均有效時才寫入數據庫。 如果沒有保存,我首先要檢查的是表單錯誤。
在您的模板中,您可以使用{{form.errors}}
渲染錯誤,它將列出每個字段和錯誤。
您的縮進是錯誤的,否則應為第一個“如果”
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})
您在pro
視圖功能中忘記了request.FILES
,畢竟您有一個圖像文件。
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>
我希望這將有所幫助。 歡迎登機;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.