Связь между одним и многими

<
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 ? Как просто проверить пустой запрос и вывести соответствующий текст? Спасибо

Вернуться на верх