Cześć!
Nowy dzień, nowe problemy z drf.
Case wygląda tak:
User wysyła request do api aby to udostępniło mu dane nt urządzenia + wyniki pomiarów tego urządzenia. Dodatkowo może dodać w query stringu limit
co spowoduje że dostanie tyleż ostatnich wyników.
Modele:
class Device(models.Model):
name = models.CharField(max_length=80)
address = models.CharField(max_length=17)
class Result(models.Model):
temperature = models.CharField(max_length=80)
moisture = models.CharField(max_length=80)
light = models.CharField(max_length=80)
conductivity = models.CharField(max_length=80)
battery = models.CharField(max_length=80)
date = models.DateTimeField(auto_now_add=True)
device = models.ForeignKey('Device', related_name='statuses', on_delete=models.CASCADE)
device_model_serializer:
from rest_framework import serializers
from smarthome.models import Device
from smarthome.models import Result
from django.db import models
from smarthome.domain.serializer.result_model_serializer import ResultModelSerializer
class DeviceModelSerializer(serializers.ModelSerializer):
results = ResultModelSerializer(many=True, source='id')
# results = models.ForeignKey(Result, related_name='id', on_delete=models.CASCADE)
class Meta:
model = Device
fields = ('id', 'name', 'address', 'results')
result_model_serializer:
from rest_framework import serializers
from smarthome.models import Result
class ResultModelSerializer(serializers.ModelSerializer):
class Meta:
model = Result
fields = ('id', 'temperature', 'moisture', 'light', 'conductivity', 'battery', 'date')
Najczęściej otrzymywanym błędem jest 'DeviceModelSerializer' object has no attribute 'results'
ale nie rozumiem czemu.
Dodatkowo, chciałbym aby limit wysłany był respektowany. Jak mogę to zrobić?
EDIT: Jeśli przyczyną wszystkiego jest to że model Device
nie ma ustawionego dodatkowego pola jak mogę dodać mu pole relacji one to many? Jeśli w jakiś sposób się da to prosiłbym jeszcze o info czemu trzeba zrobić to tak a nie po prostu pobrać odpowiednią ilość wyników i dokleić
bez zapisywania.