python - 在 Django 表单中将数据库条目显示为选项
问题描述
我正在尝试创建一个库存应用程序和一个预订应用程序。
我正在尝试从库存模型中获取条目,并且可以在预订应用程序的帮助下进行预订。
我想要达到的目标:
- 预订应用程序应从库存应用程序序列号中获取序列号条目。它应该在下拉菜单的帮助下,仅显示特定序列号的条目,因此不应输入随机序列号。(我尝试了外键和多对多的概念,但我无法在 html 页面 UI 上实现它,但我在管理面板上实现了它)您能否建议需要进行哪些更改?
但这是一个非常糟糕的方法,因为表单没有得到验证,我将用户重定向到存在序列号的其他网页。
我正在尝试查看如何将序列号作为下拉列表提供,以便用户可以选择要选择的序列号。
- 我正在尝试将插槽字段添加为唯一条目。我尝试在 reservation_app/models.py 中将插槽添加为 unique = True ,但它仅在管理面板中工作。当我尝试在 html 页面上提供重复条目时,它正在接受重复值并且它也被存储在数据库中。
我试图通过整个互联网从很长时间内找到它的解决方案,但对我来说似乎很难。
如果有人知道如何做到这一点。那将非常感激。我提供了几乎所有必要的代码,如下所示:
库存应用程序/models.py
from django.db import models
#from django.utils import timezone
# Create your models here.
class Form1(models.Model):
item = models.CharField(max_length=125)
quantity = models.IntegerField(default=0)
vendor = models.CharField(max_length=125)
inward = models.IntegerField(default=1234)
sno = models.CharField(max_length=100)
date = models.DateField()
date_received = models.DateField()
def __str__(self):
return self.item
预订应用程序/models.py
from django.db import models
# Create your models here.
class Reserve(models.Model):
team = models.CharField(max_length=125 , default="DevOps" )
rsno = models.CharField(max_length=125, default="ABCD12345")
mac_address = models.CharField(max_length=125 , default="AA-00-04-00-XX-YY")
hostname = models.CharField(max_length=125, default="gitlab.altiostar.com")
ue = models.CharField(max_length=125 , null=True)
slot = models.DateField(null=True)
def __str__(self):
return self.team
预订应用程序/views.py
from django.shortcuts import render, HttpResponse
from .models import Reserve
#from reservation_app.models import Reserve
# Create your views here.
def reserve(request):
if request.method == "POST":
team = request.POST.get('team')
rsno = request.POST.get('rsno')
mac_address = request.POST.get('mac_address')
hostname = request.POST.get('hostname')
ue = request.POST.get('ue')
slot = request.POST.get('slot')
reserve = Reserve( team=team , rsno=rsno, slot=slot , mac_address = mac_address , hostname = hostname , ue = ue ) #security_stamp_date=security_stamp_date
reserve.save()
return render(request, 'home.html')
库存应用程序/views.py
from django.shortcuts import render, HttpResponse
from inventory_app.models import Form1
import datetime
from .models import Form1
import csv
from .filters import ItemFilter
def form1(request):
if request.method == "POST":
item = request.POST.get('item')
quantity = request.POST.get('quantity')
sno = request.POST.get('sno')
inward = request.POST.get('inward')
vendor = request.POST.get('vendor')
date_received = request.POST.get('date_received')
# security_stamp_date = request.POST.get('security_stamp_date')
form1 = Form1(item=item, quantity=quantity , inward=inward , sno=sno , vendor=vendor, date=datetime.datetime.now() , date_received=date_received ) #security_stamp_date=security_stamp_date
form1.save()
return render(request, 'form1.html')
reservation_app 的 home.html 页面
<div class="form-group">
<label for="exampleFormControlInput1">Radio Serial Number</label>
<input type="text" class="form-control" id="exampleFormControlInput1" name= "rsno" placeholder="S/N123ABC123" required >
</div>
<a href="http://127.0.0.1:8000/form1_entries/" target="_blank" class="btn btn-info btn-sm" role="button" aria-disabled="true"> Check Available Serial Numbers </a>
<div class="form-group">
<label for="exampleFormControlInput1">Book your slot for Date</label>
<input type="datetime-local" class="form-control" id="exampleFormControlInput1" name= "slot" >
</div>
<button type="submit" class="btn btn-primary"> Submit </button>
inventory_app 的 form1.html
<div class="form-group">
<label for="exampleFormControlInput1">Serial Number</label>
<input type="text" class="form-control" id="exampleFormControlInput1" name= "serial_number" placeholder="S/N123ABC123" required >
</div>
<button type="submit" class="btn btn-primary"> Submit </button>
谢谢你的时间 :)
解决方案
- 您要做的是创建一个动态表单,您可以在其中生成一个选择字段。查看这篇关于创建动态表单的文章:https ://www.caktusgroup.com/blog/2018/05/07/creating-dynamic-forms-django/
推荐阅读
- angular - Angular 6 http put 方法不更新数据
- spacy - 使用 user_hooks 进行 NER 训练的 FastText 向量
- postgresql - 什么时候我们应该在 PostgreSQL 中使用 JSONB
- c - insertAtTail 未在链表中添加节点
- html - 如何在 HTML 中提供绝对文件路径
- jquery - 用另一个元素Jquery替换元素
- php - 使用输入值,查询类别是否包含名称或公司名称。我要退回公司名单
- debugging - Intellij如何在调试期间从堆栈跟踪中打开源代码
- django - 如何使用 django 计算文件的下载次数
- python - Python WeakRef.WeakMethod 传递参数