在Django中通过表单输入匹配主键提取Queryset的实现方法
实现支持RFID匹配的Django表单与模型整合方案
先确认你现有RFID模型的结构没问题,主键用rf_id存储RFID编号,关联设备编号的逻辑很清晰:
from django.db import models class RFID(models.Model): rf_id = models.CharField(max_length=10, primary_key=True) equipment_number = models.CharField(max_length=11, default="0") # 这里把default=0改成字符串更适配CharField类型 def __str__(self): return self.rf_id
接下来帮你把未写完的扫描表单补全,我们用CharField来接收RFID输入,长度和模型的rf_id保持一致,还可以加个输入提示让用户更清楚:
from django import forms class RFID_Scan(forms.Form): rf_scan = forms.CharField( max_length=10, label="扫描RFID", widget=forms.TextInput(attrs={'placeholder': '请输入/扫描RFID编号'}) )
核心的匹配逻辑放在视图里,当表单提交验证通过后,用输入的RFID值匹配模型的主键rf_id,把查询到的结果存为变量。这里一定要注意捕获不存在的情况,避免程序直接报错:
from django.shortcuts import render from .models import RFID from .forms import RFID_Scan from django.core.exceptions import ObjectDoesNotExist def rfid_scan_view(request): matched_rfid = None # 用来存储匹配到的RFID对象 if request.method == 'POST': form = RFID_Scan(request.POST) if form.is_valid(): rf_input = form.cleaned_data['rf_scan'] try: # 匹配模型主键rf_id,获取对应记录 matched_rfid = RFID.objects.get(rf_id=rf_input) # 这里可以加后续操作,比如跳转到设备详情页、记录扫描日志等 except ObjectDoesNotExist: # 处理RFID不存在的情况,给用户明确提示 form.add_error('rf_scan', '该RFID编号未关联任何设备') else: form = RFID_Scan() return render(request, 'your_scan_template.html', {'form': form, 'matched_rfid': matched_rfid})
在模板里你可以直接调用matched_rfid变量展示结果,比如:
{% if matched_rfid %} <div class="success提示"> 匹配成功!对应设备编号:{{ matched_rfid.equipment_number }} </div> {% endif %}
小建议:如果是实际的RFID硬件扫描,通常会自动填充输入框并触发提交,你可以在前端加个监听输入事件的JS逻辑,自动提交表单,提升扫描效率。
内容的提问来源于stack exchange,提问作者Kidneb
相关产品推荐
相关产品推荐

