最近在用django写一个设备管理系统,在view的地方遇到了一些关于数据库的问题。
问题描述:
因为model写的是一个人员信息,一个设备信息,又人和设备是相联系的,所以又写了一个人员与设备相联系的信息,但用的是
ForeignKey,然后需要统计装备的出入口,就不知道该怎么算了。
下面是model的部分代码:
from django.db import models
# Create your models here.
class Stu(models.Model):
GROUP = (
)
name = models.CharField(max_length=10) # 姓名
stu_ID = models.CharField(max_length=30) # 学号
detachment = models.CharField(max_length=10) #
group = models.CharField(max_length=10, choices=GROUP) #
def __str__(self):
return self.name
class Equip(models.Model):
e_ID = models.CharField(max_length=100) # 设备编号
model = models.CharField(max_length=100) # 种类
sto_time = models.DateTimeField(blank=True, null=True) # 入库时间
rfid = models.CharField(max_length=100, blank=True, null=True)
def __str__(self):
return self.e_ID
class Ute(models.Model): # 定人定物信息
stuname = models.ForeignKey(Stu, on_delete=models.CASCADE, related_name='c_order') # 使用者名字
equip = models.ForeignKey(Equip, on_delete=models.CASCADE, related_name='e_order')
rfid = models.CharField(max_length=100, blank=True, null=True) # 设备RFID号
def __str__(self):
return str(self.stuname)
class Info(models.Model):
GROUP = (
)
username = models.ForeignKey(Ute, on_delete=models.CASCADE, related_name='u_stuname') # 使用者名字
rfid = models.CharField(max_length=100, blank=True, null=True)
equip = models.CharField(max_length=100, blank=True, null=True)
state = models.CharField(max_length=10, choices=GROUP) # 状态
delivery_time = models.DateTimeField(blank=True, null=True)
storage_time = models.DateTimeField(blank=True, null=True)
因为是第一次接触django,有很多不懂的地方:
下面是view的数据添加段:
i_form = InfoForm(request.POST)
if i_form.is_valid():
name_get = i_form.cleaned_data['username']
id_get= Stu.objects.filter(name=name_get).id
rfid_get = Ute.objects.filter(stuname_id=id_get).rfid #这里出的问题
equip_get = Ute.objects.filter(stuname_id=id_get).equip #这里出的问题
state_get = i_form.cleaned_data['state']
det_get = i_form.cleaned_data['delivery_time']
sto_get = i_form.cleaned_data['storage_time']
if sto_get is None:
det_get = timezone.now()
info = Info.objects.create(username=name_get, rfid=rfid_get, equip=equip_get, state=state_get, delivery_time=det_get,
storage_time=sto_get)
info.save()
就是不清楚rfid和equip该怎么获取ute里面的信息。
这个是ute保存的数据
答
所以你三个查询全用的filter 如果能保证唯一性, 可以直接 first().id ,如果不唯一, name你所有的filter都需要遍历才能取出对应值, 而不是filter过后就取 这样会报错