【发布时间】:2019-05-24 10:27:48
【问题描述】:
通过 API 从外部站点,我获取了要保存到 Django 模型的字典数据。
我尝试将数据保存到models.py 的 Django 模型中,但失败了。
在models.py 中,我写了def get_save(self, request),如下所示。
class AirData(models.Model):
co = models.DecimalField(max_digits=5, decimal_places=2)
no2 = models.DecimalField(max_digits=5, decimal_places=2)
so2 = models.DecimalField(max_digits=5, decimal_places=2)
pm10 = models.DecimalField(max_digits=5, decimal_places=2)
pm25 = models.DecimalField(max_digits=5, decimal_places=2)
datatime = models.DateTimeField(blank=True, null=True)
timestamp = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
station = models.CharField(max_length=80)
def get_save(self, request):
url = "http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty"
params = {'stationName': '강남구', 'dataTerm': 'month', 'pageNo': '1', 'numOfRows': '10',
'_returnType': 'json', 'ServiceKey': service_key, 'ver': '1.3'}
airdata_dict = get_airdata(url, service_key, params)
self.co = airdata_dict['coValue']
self.save()
但是从 url 获取的 airdata_dict 没有保存到实例中。
请帮我演示如何在模型中保存数据。
根据@HariHaraSudhan 的建议,我将views.py 更改如下
def get_value(self):
url = "http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty"
params = {'stationName': '강남구', 'dataTerm': 'month', 'pageNo': '1', 'numOfRows': '10',
'_returnType': 'json', 'ServiceKey': service_key, 'ver': '1.3'}
airdata_dict = get_airdata(url, service_key, params)
airdata_list = airdata_dict['airdata']
kwargs = dict()
for data in airdata_list:
kwargs['station'] = data['stationName']
kwargs['co'] = data['coValue']
kwargs['no2'] = data['no2Value']
kwargs['so2'] = data['so2Value']
kwargs['o3'] = data['o3Value']
kwargs['pm10'] = data['pm10Value']
kwargs['pm2.5'] = data['pm25Value']
kwargs['time'] = data['dataTime']
obj = AirData.objects.create(self.kwargs)
而且models.py也改成:
class AirData(models.Model):
@classmethod
def create(cls, **kwargs):
my_obj = cls(kwargs)
return my_obj
但错误弹出为 AttributeError: 'WSGIRequest' object has no attribute 'kwargs'。
【问题讨论】:
-
你怎么打电话给
get_save()?你在哪里创建实例?在你的方法中,你只设置co,没有别的。其他必需的属性,如no2等呢?向我们展示您正在做什么以查看数据未保存。 -
get_save() 不是合适的名称。我只是使用 coValue 来查看它是否有效。如果是这样,我也计划填充其他属性。但它不起作用。没有错误消息,但未填充模型。
-
“不赞成”?我不明白
-
抱歉打错了。请阅读新评论。
-
但您需要在 调用 get_save() 的位置显示代码。和
print(airdata_dict)显示字典中的内容。
标签: django django-models