Django ModelForm未将数据保存到数据库,窗体保存不工作了吗?

2024-04-25 11:39:30 发布

您现在位置:Python中文网/ 问答频道 /正文

  • 列表项

你好,我是django初学者有困难的时候,有人能帮我吗?我不知道我做错了什么? 我试图创建一个窗体,并通过它保存一些数据窗体保存(). 我也是新来的,所以不要介意任何错误。在

这是我的模型:

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)

以下是我的观点:

^{pr2}$

这是我的表格:

from django import forms
from .models import Product


class NewPro(forms.ModelForm):
    class Meta:
        model = Product
        fields = ('name', 'price', 'image','category', 'store',)

默认/添加_产品.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>

在设置.py设置

MEDIA_ROOT = '/home/saifi/Saif_project/final_project/MEDIA_ROOT/upload_to'

Tags: todjangostorenamefromimportformfalse
3条回答

你的缩进是错的,其他的应该是第一个“如果”

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})

我可以在视图中看到一些缩进问题,但我猜这只是复制到Stackoverflow时的格式问题。在

form.is_valid()检查将验证所有表单字段,并且仅当所有输入字段都有效时才会写入数据库。如果不保存,我首先要检查的是表单错误。在

在模板中,您可以用{{form.errors}}呈现错误,它将列出每个字段和错误。在

您忘记了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})

请尝试以下方式使用表单:

^{pr2}$

我希望这会有帮助。欢迎加入;)

相关问题 更多 >