在Django中合并2个模型(表),并在我的模板中显示
我有两个模型,一个定义了我拥有的所有设备,另一个存储设备获取的信息。他们的代码如下:在Django中合并2个模型(表),并在我的模板中显示,django,django-models,django-templates,Django,Django Models,Django Templates,我有两个模型,一个定义了我拥有的所有设备,另一个存储设备获取的信息。他们的代码如下: class Device(models.Model): dev_eui = models.CharField(max_length=16, primary_key=True) producer = models.CharField(max_length=20, blank=True, null=True) model = models.CharField(max_length=20, b
class Device(models.Model):
dev_eui = models.CharField(max_length=16, primary_key=True)
producer = models.CharField(max_length=20, blank=True, null=True)
model = models.CharField(max_length=20, blank=True, null=True)
firmware = models.CharField(max_length=10, blank=True, null=True)
dev_name = models.CharField(max_length=20, blank=True, null=True)
description = models.CharField(max_length=40, blank=True, null=True)
fixed = models.BooleanField()
dev_lat = models.FloatField(null=True, blank=True)
dev_lon = models.FloatField(null=True, blank=True)
deco_name = models.CharField(max_length=20)
fleet_id = models.IntegerField(null=True, blank=True)
class DevData(models.Model):
data_uuid = models.UUIDField(primary_key=True, default=uuid.uuid1, editable=False)
data_id = models.IntegerField()
dev_eui = models.CharField(max_length=16)
gateway = models.CharField(max_length=25)
data_timestamp = models.DateTimeField()
rssi = models.IntegerField()
snr = models.IntegerField()
datarate = models.CharField(max_length=15)
frequency = models.IntegerField()
seq = models.IntegerField()
data_1 = models.FloatField()
data_2 = models.FloatField(null=True, blank=True)
data_3 = models.FloatField(null=True, blank=True)
data_4 = models.FloatField(null=True, blank=True)
data_5 = models.FloatField(null=True, blank=True)
data_6 = models.FloatField(null=True, blank=True)
data_7 = models.FloatField(null=True, blank=True)
实际上,我想要的是在我的模板中显示一个表,组合来自devData
的所有数据,并从devices
添加dev\u name
和fleet\u id
现在我要做的是获取所有数据,并在模板中对其进行过滤。但我确信在视图.py中这样做会更好、更容易,但我不知道怎么做
在阅读一些信息时,我发现了union()
函数,但它不起作用,我不确定这是否是最好的选择
@login_required(login_url='/user_app/login/')
def user_data(request):
dev_data = DevData.objects.all()
devices = Device.objects.all()
test = DevData.objects.all().values_list(
"dev_eui"
).union(
Device.objects.all().values_list(
"dev_eui"
))
ctx = {'DevData':dev_data,'Devices':devices, 'Test':test}
return render(request, template_name='data.html', context=ctx)
这个连接没有显示任何内容
有人能帮我吗?非常感谢 您需要一个外键来关联这两个模型
class Device(models.Model):
dev_eui = models.CharField(max_length=16, primary_key=True)
class DevData(models.Model):
device = models.ForeignKeyField(Device, related_name='dev_data', on_delete=models.CASCADE)
data_uuid = models.UUIDField(primary_key=True, default=uuid.uuid1, editable=False)
data_id = models.IntegerField()
# This is not needed, it can be accessed via instance.device.dev_eui now
# dev_eui = models.CharField(max_length=16)
然后,要获取特定设备的所有DevData实例,请执行以下操作:
for device in Device.objects.all():
x = device.dev_data.all()
请阅读以更好地理解关系字段 非常感谢,最后一个问题,你说我可以删除dev_eui的线路。这是否可能,因为此外键现在是dev_eui?否。通过外键字段可以访问设备型号,该型号上直接有dev_eui
字段。