Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django中合并2个模型(表),并在我的模板中显示_Django_Django Models_Django Templates - Fatal编程技术网

在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
字段。