Связь между одним и многими
<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)
Итак, у меня есть две модели Field и Sensor, которые имеют связь OneToMany. Я создаю страницу, где у меня есть все поля, и каждый раз, когда я нажимаю на одно из них, я получаю соответствующие датчики. Я сделал 4 тестовых датчика (3 из них на поле 1, 1 на поле 2), но первый печатает на первое поле, а второй на второе, возможно из-за параметра pk. Подскажите, как это исправить?
View :
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, который означает id модели Field so, я думаю, вы можете заменить эту фильтрацию вместо:
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 ? Как просто проверить пустой запрос и вывести соответствующий текст? Спасибо