Python Django表单未在数据库中保存对象

Python Django表单未在数据库中保存对象,python,django,Python,Django,我的表单未在数据库中保存任何对象。不知道为什么,尝试了更多的方法,但没有任何效果 在models.py中 from django.db import models class ProductListing(models.Model): product_name = models.CharField(max_length=40, blank=False) product_image = models.ImageField(blank=True) product_descr

我的表单未在数据库中保存任何对象。不知道为什么,尝试了更多的方法,但没有任何效果

在models.py中

from django.db import models

class ProductListing(models.Model):
    product_name = models.CharField(max_length=40, blank=False)
    product_image = models.ImageField(blank=True)
    product_description = models.TextField(blank=False)
    product_price = models.DecimalField(max_digits=7, decimal_places=0, blank=True, null=True)
    product_quantity = models.DecimalField(max_digits=10, decimal_places=0)
from django.shortcuts import render
from .forms import addproduct_form

def addproduct_page(request, *arg, **kwarg):
    if request.method == 'POST':
        form = addproduct_form(request.POST)
        if form.is_valid():
            form.save()
    else:
        form = addproduct_form

    return render(request, 'StaffPages/add_product.html', {'productform' : form})
在视图中.py

from django.db import models

class ProductListing(models.Model):
    product_name = models.CharField(max_length=40, blank=False)
    product_image = models.ImageField(blank=True)
    product_description = models.TextField(blank=False)
    product_price = models.DecimalField(max_digits=7, decimal_places=0, blank=True, null=True)
    product_quantity = models.DecimalField(max_digits=10, decimal_places=0)
from django.shortcuts import render
from .forms import addproduct_form

def addproduct_page(request, *arg, **kwarg):
    if request.method == 'POST':
        form = addproduct_form(request.POST)
        if form.is_valid():
            form.save()
    else:
        form = addproduct_form

    return render(request, 'StaffPages/add_product.html', {'productform' : form})
模板内部

{% block content %}
{% load static %}
<link rel = "stylesheet" type = "text/css" href = "{% static 'StaffPages/add_product.css' %}"/>
<div class="maincontainer">
    <form class="addproductform">
        <div>{{productform.product_name}}</div>
        <div>{{productform.product_image}}</div>
        <div>{{productform.product_description}}</div>
        <div>{{productform.product_price}}</div>
        <div>{{productform.product_quantity}}</div>
        <input type="submit" value="Submit">
    </form>
</div>
{% endblock %}

{%block content%}
{%load static%}
{{productform.product_name}
{{productform.product_image}
{{productform.product_description}}
{{productform.product_price}
{{productform.product_quantity}
{%endblock%}

您需要在表单中明确指定
POST
方法,否则,它将是
GET

<form class="addproductform" method="POST"> {% csrf_token %}
    <div>{{productform.product_name}}</div>
    <div>{{productform.product_image}}</div>
    <div>{{productform.product_description}}</div>
    <div>{{productform.product_price}}</div>
    <div>{{productform.product_quantity}}</div>
    <input type="submit" value="Submit">
</form>
{%csrf\u令牌%}
{{productform.product_name}
{{productform.product_image}
{{productform.product_description}}
{{productform.product_price}
{{productform.product_quantity}
另外,不要忘记放置
{%csrf\u token%}

缺少的是

  • 动作url
  • csrf令牌
比如,

{% block content %}
{% load static %}
<link rel = "stylesheet" type = "text/css" href = "{% static 'StaffPages/add_product.css' %}"/>
<div class="maincontainer">
    <form action="{% url "app_name:url_name" %}  class="addproductform">{% csrf_token %}
        <div>{{productform.product_name}}</div>
        <div>{{productform.product_image}}</div>
        <div>{{productform.product_description}}</div>
        <div>{{productform.product_price}}</div>
        <div>{{productform.product_quantity}}</div>
        <input type="submit" value="Submit">
    </form>
</div>
{% endblock %}
{%block content%}
{%load static%}

没有操作url,此表单无法工作。(如果动作url基本索引(“/”),则可以工作。)@AliYaman默认动作url为当前url;如果您不想更改它(例如,将表单发布到其他页面),则无需指定。您是如何从问题中知道这一点的?如果不同呢?虽然这种情况通常很少见,但表单上下文变量(
productform
)从负责处理表单的同一视图传递到表单;所以我们这里有相同的URL。