首页 > 解决方案 > 在 Django 表单中将数据库条目显示为选项

问题描述

我正在尝试创建一个库存应用程序和一个预订应用程序。

我正在尝试从库存模型中获取条目,并且可以在预订应用程序的帮助下进行预订。

我想要达到的目标:

  1. 预订应用程序应从库存应用程序序列号中获取序列号条目。它应该在下拉菜单的帮助下,仅显示特定序列号的条目,因此不应输入随机序列号。(我尝试了外键和多对多的概念,但我无法在 html 页面 UI 上实现它,但我在管理面板上实现了它)您能否建议需要进行哪些更改?

现在,我正在创建一个这样的表单: 在此处输入图像描述

但这是一个非常糟糕的方法,因为表单没有得到验证,我将用户重定向到存在序列号的其他网页。

我正在尝试查看如何将序列号作为下拉列表提供,以便用户可以选择要选择的序列号。

  1. 我正在尝试将插槽字段添加为唯一条目。我尝试在 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>

谢谢你的时间 :)

标签: pythonhtmlpython-3.xdjangodjango-forms

解决方案


  1. 您要做的是创建一个动态表单,您可以在其中生成一个选择字段。查看这篇关于创建动态表单的文章:https ://www.caktusgroup.com/blog/2018/05/07/creating-dynamic-forms-django/

推荐阅读