在单页上处理不同的表单发布请求 -Django

如何解决在单页上处理不同的表单发布请求 -Django

我是一个新手,我正在做一个网站。在这个网站上,我创建了管理面板来管理不同的产品和属性。

我有一个名为 size.html 的页面,我应该更改它的名称并使其成为 productAtributes.html 并且在这个页面上我想完成所有操作针对不同的产品属性进行添加、更新、删除操作。

我的代码如下:

models.py

class Product(models.Model):
    prod_ID = models.AutoField("Product ID",primary_key=True)
    prod_Name = models.CharField("Product Name",max_length=30,null=False)
    prod_Desc = models.CharField("Product Description",max_length=2000,null=False)
    prod_Price = models.IntegerField("Product Price/Piece",default=0.00)
    prod_img = models.ImageField("Product Image",null=True)

    def __str__(self):
        return "{}-->{}".format(self.prod_ID,self.prod_Name)
class Size(models.Model):
    size_id = models.AutoField("Size ID",primary_key=True,auto_created=True)
    prod_size = models.CharField("Product Size",max_length=20,null=False)

    def __str__(self):
        return "{size_id}-->{prod_size}".format(size_id=self.size_id,prod_size=self.prod_size)


class Color(models.Model):
    color_id = models.AutoField("Color ID",auto_created=True)
    prod_color = models.CharField("Product Color",max_length=50,null=False)

    def __str__(self):
        return "{color_id}-->{prod_color}".format(color_id=self.color_id,prod_color=self.prod_color)


class PaperChoice(models.Model):
    paper_id = models.AutoField("Paper Choice ID",auto_created=True)
    paper_choices_name = models.CharField("Paper Choices",null=False)

    def __str__(self):
        return "{}-->{}".format(self.paper_id,self.paper_choices_name)

views.py

from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage
from django.shortcuts import render,redirect

from user.models import *

def size(request):
    if request.method == 'POST':
        size_store = request.POST['prod_size']
        size_update = Size(prod_size=size_store)
        size_update.save()
        return redirect('/admin1/productSize')
    else:
        size_show = Size.objects.all()
        # start paginator logic
        paginator = Paginator(size_show,3)
        page = request.GET.get('page')
        try:
            size_show = paginator.page(page)
        except PageNotAnInteger:
            size_show = paginator.page(1)
        except EmptyPage:
            size_show = paginator.page(paginator.num_pages)
        # end paginator logic
        return render(request,'admin1/size.html',{'size_show': size_show})


def size_edit(request,id):
    size_edit = Size.objects.filter(size_id=id)
    return render(request,{'size_edit': size_edit})


def size_edit_update(request,id):
    if request.method == 'POST':
        size_store = request.POST['prod_size']
        size_update = Size(size_id=id,prod_size=size_store)
        size_update.save()
        return redirect('/admin1/productSize')


def size_delete(request,id):
    size_deletee = Size.objects.filter(size_id=id)
    size_deletee.delete()
    return redirect('/admin1/productSize')

当我为尺寸创建添加、更新、删除功能时,我将对颜色纸张选择做同样的事情

size.html

{% extends 'admin1/layout/master.html' %}
{% block title %}Size{% endblock %}
{% block main %}
<h1>
    <center>Size</center>
</h1>
<div class="container">
    <div class="row">
        <div class="col-lg-2"></div>
        <div class="col-lg-10">

            <button type="button" class="btn btn-primary mt-2" data-toggle="modal" data-target="#modal-primary">Add
                Size
            </button>
            <div class="modal fade" id="modal-primary">
                <div class="modal-dialog">
                    <div class="modal-content">
                        <div class="modal-header">
                            <h4 class="modal-title">Add Product Size</h4>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                <span aria-hidden="true">&times;</span></button>
                        </div>
                        <div class="modal-body mt-2">
                            <form action="{% url 'admin-product-size'%}" method="POST" enctype="multipart/form-data">
                                {% csrf_token %}
                                <label>Product Size:</label>
                                <input type="text" name="prod_size" class="form-control w-50"><br>
                                <br>
                                <input type="Submit" name="Submit" value="Submit" class="btn btn-success w-50"><br>

                                <div class="modal-footer justify-content-between">
                                    <button type="button" class="btn btn-outline-light" data-dismiss="modal">Close
                                    </button>
                                </div>
                            </form>
                        </div>
                    </div>
                    <!-- /.modal-content -->
                </div>
                <!-- /.modal-dialog -->
            </div>
            <!-- /.modal -->

            <br>
            {% if size_show %}
            <div class="container-fluid ">
                <div class="row">
                    <div class="card mt-2 border border-secondary">
                        <div class="card-header">
                            <h3 class="card-title ">Product Table</h3>
                        </div>
                        <!-- /.card-header -->
                        <div class="card-body">

                            <table class="table table-bordered border border-info">
                                <thead>
                                <tr>
                                    <th>Product Id</th>
                                    <th>Product Size</th>
                                </tr>
                                </thead>
                                <tbody class="justify-content-center">
                                {% for x in size_show %}

                                <tr>
                                    <td>{{x.size_id}}</td>
                                    <td>{{x.prod_size}}</td>
                                    <td><a href="/admin1/size_edit/{{x.size_id}} "
                                           class="btn btn-outline-primary mt-2"><i
                                            class="fa fa-pencil-square-o" aria-hidden="true"></i></a>
                                        <a href="/admin1/size_delete/{{x.size_id}}"
                                           class="btn btn-outline-danger mt-2"><i
                                                class="fa fa-trash" aria-hidden="true"></i></a>
                                    </td>
                                </tr>

                                {% endfor %}

                                </tbody>
                            </table>

                        </div>
                        <!-- /.card-body -->
                        <div class="card-footer clearfix ">
                            <ul class="pagination pagination-sm m-0 justify-content-center">
                                {% if size_show.has_previous %}
                                <li class="page-item"><a class="page-link"
                                                         href="?page={{size_show.has_previous_page_number}}">
                                    Previous </a>
                                </li>
                                {% endif%}
                                {% for x in size_show.paginator.page_range %}

                                {% if size_show.number == x %}
                                <li class="page-item active"><a class="page-link" href="?page={{x}}">{{x}}</a></li>
                                {% else%}
                                <li class="page-item"><a class="page-link" href="?page={{x}}">{{x}}</a></li>
                                {% endif %}
                                {% endfor %}

                                {% if size_show.has_next %}
                                <li class="page-item"><a class="page-link"
                                                         href="?page={{size_show.has_next_page_number}}"> Next </a>
                                </li>
                                {% endif %}
                            </ul>
                        </div>
                    </div>
                    <!-- /.card -->
                </div>
            </div>
            {% endif %}
            {% if size_edit %}
            {% for x in size_edit %}
            <form action="/admin1/size_data_update/{{x.size_id}}" method="POST">
                {% csrf_token %}
                <label>Size Name:</label>
                <input type="text" name="prod_size" value="{{x.prod_size}}" class="form-control w-50"><br>

                <input type="Submit" name="Submit" value="Submit" class="btn btn-success w-50"><br>
            </form>
            {% endfor %}
            {% endif %}
        </div>
    </div>
</div>
{% endblock %}

为了执行 views.py 的操作,我创建了 size.html .Nut 大约 1012 > 产品属性,对于这些属性,我不想创建单独的 html 页面。

我想对单个html页面中的所有属性进行所有操作。可能吗?

意味着根据属性类型请求页面数据应该动态变化,我不必为每个属性创建单独的模板页面。

解决方法

您需要在视图中创建表单,而不是模板,我不确定这是否是最佳实践,但我认为这是您可以执行此操作的唯一方法,(使用 Class-Based Views 会简化此过程很多)但如果你想坚持功能,这就是你要做的。

让我们输入一行:

<label>Product Size:</label>
<input type="text" name="prod_size" class="form-control w-50"><br>

让我们使用Django的标签,把它变成这样:

<label>{{form.display_name}}:</label>
<input type="text" name="{{form.name}}" class="form-control w-50">

类可能是相同的,但您可以将相同的功能扩展到类或类型字段。

在后端,您希望使用嵌套字典制作一个包含所有要显示的元素的列表:

forms = [  # Each form
    [  # Each field within the form,this way,you can have a different amount each time
        {'display_name': 'Product Size',# label Display name
         'name': 'prod_size'},# name tag value
        {'display_name': "it's value",# This is a different field
         'name': 'just an example'}  
    ],]

然后你可以在模板中做一个 for 循环:

{% for form in forms %}
    {$ for field in form %}
       <label>{{field.display_name}}:</label>
       <input type="text" name="{{field.name}}" class="form-control w-50">

我不确定您要在代码中做什么,所以我没有让这个例子太具体,但希望它会给您灵感,让您走上正确的轨道,如果你需要的话更多帮助,请询问

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res