簡體   English   中英

Django ModelForm沒有將數據保存到數據庫,Form.save無法正常工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM