Django Соединения по внешним ключам

У меня есть модель Field, которая имеет связи OneToMany с моделями TreeSensor и WeatherStation. Я пытаюсь передать запросы каждой модели TreeSensor/weatherStation, которые соответствуют id каждого поля, но получаю Field 'id' expected a number but got <built-in function id>. .Как это исправить? Может быть, изменить что-то в filter?

class Field(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True, default=None)
    friendly_name = models.CharField(max_length=24, blank=True)

class TreeSensor(models.Model):  
    field = models.ForeignKey(Field, on_delete=models.CASCADE)
    ...

class WeatherStation(models.Model):
    field = models.ForeignKey(Field, on_delete=models.CASCADE)
    ...

view

def map(request):
    field_list = models.Field.objects.filter(user = request.user)
    tree_sensors = models.TreeSensor.objects.filter(field__pk = id)
    weather_stations = models.WeatherStation.objects.filter(field__pk = id)
    context = {
        "title": "Map",
        "field_list": field_list,
        "tree_sensors": tree_sensors,
        "weather_stations" : weather_stations,
    }
    template = 'agriculture/map.html'
    return render(request, template, context)

В вашем представлении вы фильтруете некоторое поле field по id, которое нигде не определено....

У вас есть кверисет Fields, поэтому, вероятно, вы должны сделать что-то вроде этого:

def map(request):
    field_list = models.Field.objects.filter(user = request.user).values_list('id', flat=True)
    tree_sensors = models.TreeSensor.objects.filter(field__pk__in = field_list)
    weather_stations = models.WeatherStation.objects.filter(field__pk__in = field_list)

@Walucas Ваш подход был правильным, но он был немного другим. Это работает следующим образом : view

def map(request):

    field_list = models.Field.objects.filter(user = request.user)
    tree_sensors = models.TreeSensor.objects.filter(field_id__in = field_list.values_list('id',flat=True))
    weather_stations = models.WeatherStation.objects.filter(field_id__in = field_list.values_list('id',flat=True))
    context = {
        "title": "Map",
        "field_list": field_list,
        "tree_sensors": tree_sensors,
        "weather_stations" : weather_stations,
    }
    template = 'agriculture/map.html'
    return render(request, template, context)
Вернуться на верх