Я использую Django и django-restfframework для выполнения следующей задачи. Мне нужны эти 3 модели. (1) Персональная модель для хранения информации о клиенте. (2) Модель датчика и (3) Модель DataPoint. Каждый из них является отношением друг к другу. У человека может быть много датчиков, и каждый датчик может иметь много точек данных, но никогда наоборот. Я создал следующие модели в файле models.py. ..Дизайн модели Django RDBMS для рамки отдыха
class Person(models.Model):
first_name = models.CharField(max_length=30, null=False)
last_name = models.CharField(max_length=30, null=False)
class Sensor(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
name = models.CharField(max_length=100, null=False)
sensor_id = models.UUIDField(null=True, blank=True)
class DataPoint(models.Model):
sensor = models.ForeignKey(Sensor, on_delete=models.CASCADE)
date_time_instance = models.DateTimeField()
value = models.DecimalField(max_digits=10, decimal_places=4)
Serializer.py имеет следующий код ...
class PersonSerializer(serializers.ModelSerializer):
class Meta:
model = Person
fields = ('id', 'first_name', 'last_name')
class SensorSerializer(serializers.ModelSerializer):
person = PersonSerializer()
class Meta:
model = Sensor
fileds = ('id', 'name', 'person')
class DataPointSerializer(serializers.ModelSerializer):
sensor = SensorSerializer()
class Meta:
model = DataPoint
fileds = ('id', 'date_time_instance', 'value', 'sensor')
views.py имеет следующий код для запроса DataPoint API ...
@api_view(['GET', 'POST'])
def datapoint_list(request):
if request.method == 'GET':
dp = DataPoint.objects.all()
serializer = DataPointSerializer(dp, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = DataPointSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Вот мои вопросы: -
Я создал хорошие реляты по схеме базы данных?
Кажется, что, когда я выполняю запрос POST по набору данных, я должен предоставить всем Личность и всю информацию о датчике. Как я могу просто предоставить запрос на данные (временную метку и значение данных), и пусть все остальное позаботится (т. Е. Правильный датчик и проверка человека)?
Помогла ли схема базы данных без привязки? Как ?
Где я могу указать, что все запросы - это запросы JSON в моем приложении django?
Заранее за вашу помощь.
Не могли бы вы пояснить # 2? Я думаю, что я понимаю, что вы имеете в виду, однако запрос POST для конечной точки API-интерфейса datapoint будет создавать совершенно новый datapoint, поэтому Person и Sensor не могут быть известны, если вы не указали их. Если вы хотите обновить datapoint, вы можете принять методы PUT и PATCH. Если вы используете только POST, вы можете написать свой метод 'save()' в DataPointSerializer таким образом, чтобы он анализировал Person и Sensor из URL-адреса. Пример: POST для '/ api/datapoint///', а затем вытащите kwargs из URL при создании (или обновлении, если существует) данных. –
dkhaupt