同一模型中的多个(相同)多对一关系

时间:2020-06-09 21:37:02

标签: django

我有一个模型Device。每个设备都有3个传感器,它们具有自己的颜色,状态等。

因此,我创建了一个类Sensor,需要在其中存储所有传感器数据。

现在,我需要在Device模型中为与Sensor模型连接的每个传感器提供一个属性,以便我可以检索数据。

执行此操作的最佳方法是什么?

这样做吗?:

在每个传感器的设备模型中:

light_sensor = models.ForeignKey(
        Sensor, on_delete=SET_NULL, blank=True, null=True,
    )

或在传感器模型中:

class Sensor(models.Model):
    device = models.ForeignKey(
        Device, on_delete=models.CASCADE, related_name="devicesensor"
    )
    status = models.CharField(max_length=25, blank=False)
    color = models.CharField(max_length=25, blank=False)

1 个答案:

答案 0 :(得分:1)

您想要的是多对一关系,其中许多传感器连接到一个设备。 在这种情况下,外键位于多个侧面。因此,每个传感器都应具有一个指向其设备的外键。

这是一个粗略的例子。

from django.db import models

class Device(models.Model):
    pass

class Sensor(models.Model):
    device = models.ForeignKey(
        Device, on_delete=models.CASCADE, related_name="devicesensor"
    )
    status = models.CharField(max_length=25, blank=False)
    color = models.CharField(max_length=25, blank=False)

现在从外壳程序开始,我们使用manage.py shell ...

创建一个带有一些传感器的设备
# create device
d = Device()
d.save()

# create sensors
s1 = Sensor(device=d, status='online', color='green');
s1.save()
s2 = Sensor(device=d, status='online', color='green');
s2.save()
s3 = Sensor(device=d, status='online', color='green');
s3.save()

# get sensors
d = Device.objects.first()
d.devicesensor.all()