[英]Django REST Framework Foreign Key - NOT NULL constraint failed
我在Django REST Framework中具有以下設置:
models.py:
class Device(models.Model):
name = models.CharField()
latitude = models.FloatField()
longitude = models.FloatField()
altitude = models.FloatField()
class Event(models.Model):
id_device = models.ForeignKey(Device, related_name='events')
name = models.CharField()
date = models.CharField()
time = models.CharField()
class Values(models.Model):
id_device = models.ForeignKey(Device)
id_event = models.ForeignKey(Event, related_name='values')
x = models.FloatField()
y = models.FloatField()
z = models.FloatField()
time = models.IntegerField()
serializers.py:
class DeviceSerializer(serializers.ModelSerializer):
events = EventSerializer(many=True)
class Meta:
model = Device
fields = ('url', 'id', 'name', 'latitude', 'longitude', 'altitude', 'events')
def create(self, validated_data):
events_data = validated_data.pop('events')
device = Device.objects.create(**validated_data)
for event in events_data:
Events.objects.create(device=device, **event)
return device
class EventSerializer(serializers.ModelSerializer):
values = ValuesSerializer(many=True)
class Meta:
model = Event
fields = ('url', 'id', 'name', 'date', 'time', 'values')
def create(self, validated_data):
values_data = validated_data.pop('values')
event = Event.objects.create(**validated_data)
for value in values_data:
Values.objects.create(event=event, **value)
return event
class ValuesSerializer(serializers.ModelSerializer):
class Meta:
model = Values
fields = ('x', 'y', 'z', 'time')
當我嘗試發布事件時 ,使用像這樣的JSON文件分配了一些值 :
{
"name": "name_example",
"date": "date_example",
"time": "time_example",
"values": [
{
"x": 1,
"y": 2,
"z": 3,
"time": 1
},
{
"x": 10,
"y": 20,
"z": 30,
"time": 2
},
{
"x": 100,
"y": 200,
"z": 300,
"time": 4
}
]
}
我收到錯誤IntegrityError: NOT NULL constraint failed: drf_event.id_device_id
我是這個框架的新手,為了發布帶有分配給現有設備的 值的新事件 ,該怎么辦?
您沒有在EventSerializer中指向設備的鍵。 您錯過了id_device。
class EventSerializer(serializers.ModelSerializer):
values = ValuesSerializer(many=True)
class Meta:
model = Event
fields = ('id_device', 'url', 'id', 'name', 'date', 'time', 'values')
並且您需要在json中添加密鑰:
{
"id_device": 1,
"name": "name_example",
"date": "date_example",
"time": "time_example",
"values": [
{
"x": 1,
"y": 2,
"z": 3,
"time": 1
},
{
"x": 10,
"y": 20,
"z": 30,
"time": 2
},
{
"x": 100,
"y": 200,
"z": 300,
"time": 4
}
]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.