一对多连接
One To Many Connection
所以我有两个模型 Field 和 Sensor,它们具有 OneToMany 连接。我正在创建一个页面,其中包含所有字段,每当我单击一个字段时,我都会获得其各自的传感器。我制作了 4 个测试传感器(其中 3 个在 Field1 上,1 个在 Field2 上)但它打印第一个到第一个字段和第二个到第二个字段可能是因为 pk 参数。知道如何解决这个问题吗?
class Field(models.Model):
friendly_name = models.CharField(max_length=24, blank=True)
soil_type = models.CharField(max_length=24, choices=SOIL_TYPES, blank=True)
cultivation = models.CharField(max_length=128, choices=CULTIVATIONS, blank=True)
class TreeSensor(models.Model):
field = models.ForeignKey(Field, on_delete=models.CASCADE)
datetime = models.DateTimeField(blank=True, null=True, default=None)
sensor_name = models.CharField(max_length=200, blank=True)
longitude = models.DecimalField(max_digits=22, decimal_places=16, blank=True, null=True)
latitude = models.DecimalField(max_digits=22, decimal_places=16, blank=True, null=True)
查看:
def detail(request, field_id):
try:
sensor = models.TreeSensor.objects.get(pk=field_id)
except models.TreeSensor.DoesNotExist:
raise Http404("No sensors for this field")
return render(request, 'dashboard/detail.html', {'sensor': sensor})
html:
<h1> {{ field.friendly_name}}</h1>
{% for sensor in field.treesensor_set.all %}
{{treesensor.sensor_name}}
{%endfor%}
我不确定这行会打印出什么?在这种情况下,“models”是什么意思!
models.TreeSensor.objects.get(pk=field_id)
但是,如果您传递了 field_id,这意味着 Field 模型的 ID,那么我认为您可以替换该过滤:
TreeSensor.objects.filter(field__pk=field_id)
是的,这似乎可以解决问题我也更改了模板
{% for sensor in sensor %}
<ul>
<li>{{ sensor.sensor_name}}</li>
</ul>
{%endfor%}
并查看:
def detail(request, field_id):
try:
sensor = models.TreeSensor.objects.filter(field__pk=field_id)
except sensor.DoesNotExist:
raise Http404("No sensors for this field")
return render(request, 'dashboard/detail.html', {'sensor': sensor})
我在正确的字段上安装了正确的传感器,但如果字段为空,http404 不会引发错误。
也许我在 does.not.exist
上做错了什么?如何只检查一个空查询并打印出相应的文本?谢谢
所以我有两个模型 Field 和 Sensor,它们具有 OneToMany 连接。我正在创建一个页面,其中包含所有字段,每当我单击一个字段时,我都会获得其各自的传感器。我制作了 4 个测试传感器(其中 3 个在 Field1 上,1 个在 Field2 上)但它打印第一个到第一个字段和第二个到第二个字段可能是因为 pk 参数。知道如何解决这个问题吗?
class Field(models.Model):
friendly_name = models.CharField(max_length=24, blank=True)
soil_type = models.CharField(max_length=24, choices=SOIL_TYPES, blank=True)
cultivation = models.CharField(max_length=128, choices=CULTIVATIONS, blank=True)
class TreeSensor(models.Model):
field = models.ForeignKey(Field, on_delete=models.CASCADE)
datetime = models.DateTimeField(blank=True, null=True, default=None)
sensor_name = models.CharField(max_length=200, blank=True)
longitude = models.DecimalField(max_digits=22, decimal_places=16, blank=True, null=True)
latitude = models.DecimalField(max_digits=22, decimal_places=16, blank=True, null=True)
查看:
def detail(request, field_id):
try:
sensor = models.TreeSensor.objects.get(pk=field_id)
except models.TreeSensor.DoesNotExist:
raise Http404("No sensors for this field")
return render(request, 'dashboard/detail.html', {'sensor': sensor})
html:
<h1> {{ field.friendly_name}}</h1>
{% for sensor in field.treesensor_set.all %}
{{treesensor.sensor_name}}
{%endfor%}
我不确定这行会打印出什么?在这种情况下,“models”是什么意思!
models.TreeSensor.objects.get(pk=field_id)
但是,如果您传递了 field_id,这意味着 Field 模型的 ID,那么我认为您可以替换该过滤:
TreeSensor.objects.filter(field__pk=field_id)
是的,这似乎可以解决问题我也更改了模板
{% for sensor in sensor %}
<ul>
<li>{{ sensor.sensor_name}}</li>
</ul>
{%endfor%}
并查看:
def detail(request, field_id):
try:
sensor = models.TreeSensor.objects.filter(field__pk=field_id)
except sensor.DoesNotExist:
raise Http404("No sensors for this field")
return render(request, 'dashboard/detail.html', {'sensor': sensor})
我在正确的字段上安装了正确的传感器,但如果字段为空,http404 不会引发错误。
也许我在 does.not.exist
上做错了什么?如何只检查一个空查询并打印出相应的文本?谢谢