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)