[英]Django serializer won't save to database
我正在制作小的 rest api,它采用 ip 地址,然后將其發送到 ipstack 並保存返回的數據做數據庫。 問題是調用 serializer.save 時我的數據沒有保存。 我確定這是一些小問題,但我花了太多時間查看這段代碼,所以我什么也沒看到
如果來自 ip 的數據在這里不正確,請不要介意我已經更改了它讓我們從models.py開始
class Location(models.Model):
ip = models.CharField(max_length=15)
type = models.CharField(max_length=6)
latitude = models.DecimalField(max_digits=10, decimal_places=8)
longitude = models.DecimalField(max_digits=10,decimal_places=0)
continent_code = models.CharField(max_length=2)
continent_name = models.CharField(max_length=20)
country_code = models.CharField(max_length=10)
country_name = models.CharField(max_length=70)
region_code = models.CharField(max_length=10)
region_name = models.CharField(max_length=50)
city = models.CharField(max_length=100)
zip = models.CharField(max_length=10)
def __str__(self):
return str(self.ip)
串行器
from rest_framework import serializers
from .models import *
class LocationSerializer(serializers.ModelSerializer):
class Meta:
model = Location
exclude = ['id']
觀點
ip = '89.64.124.126'
if ip:
try:
data = location_search.get_location(ip)
if data is None:
return Response(status=status.HTTP_400_BAD_REQUEST,)
except:
return Response("Our services are temporarily unavailable", status=503,)
serializer = self.serializer_class(data=data)
print(serializer)
print(serializer.is_valid())
if serializer.is_valid():
serializer.save()
return Response("Data was successfully added", status=status.HTTP_201_CREATED,)
else:
return Response("Database error occurred, try again later",status=status.HTTP_500_INTERNAL_SERVER_ERROR,)
這是我打印時得到的
LocationSerializer(data={'ip': '89.64.124.126', 'type': 'ipv4', 'continent_code': 'EU', 'continent_name': 'Europe', 'country_code': 'PL', 'country_name': 'Poland', 'region_code': 'MZ', 'region_name': 'Mazovia', 'city': 'Warsaw', 'zip': '00-877', 'latitude': 42.239688873291016, 'longitude': 10.98748016357422, 'location': {'geoname_id': 756135, 'capital': 'Warsaw', 'languages': [{'code': 'pl', 'name': 'Polish', 'native': 'Polski'}], 'country_flag': 'http://assets.ipstack.com/flags/pl.svg', 'country_flag_emoji': '🇵🇱', 'country_flag_emoji_unicode': 'U+1F1F5 U+1F1F1', 'c alling_code': '48', 'is_eu': True}}):
ip = CharField(max_length=15)
type = CharField(max_length=6)
latitude = DecimalField(decimal_places=8, max_digits=10)
longitude = DecimalField(decimal_places=0, max_digits=10)
continent_code = CharField(max_length=2)
continent_name = CharField(max_length=20)
country_code = CharField(max_length=10)
country_name = CharField(max_length=70)
region_code = CharField(max_length=10)
region_name = CharField(max_length=50)
city = CharField(max_length=100)
zip = CharField(max_length=10)
False
使用以下代碼檢查錯誤並修復它們。
print(serializer.errors)
您需要在緯度和經度而不是小數字段上設置 models.FloatField()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.