我正在使用 pandas
openpyxl
来读取项目中的 excel 文件。阅读完 Excel 文件后,我最终得到了字典列表。这些词典有“2024 年”、“范围”、“要点”等键。
我的 Django 应用程序中有一个字段,其中包含“年份”、“范围”、“main_point”等字段。
我的问题是如何编写序列化器将字典键转换为模型中的字段?我想在序列化器中执行此操作,因为我还想验证字典数据。
所以我有这个清单:
my_data = [
{"Year 2024": "5", "Range":"2", "Main Point": "OK"},
{"Year 2024": "6", "Range":"3", "Main Point": "OK"},
{"Year 2024": "7", "Range":"4", "Main Point": "OK"},
...
]
还有我的模型
class MyModel(models.Model):
year = models.IntegerField(...)
range = models.IntegerField(...)
main_pont = models.CharField(...)
尝试:
from rest_framework import serializers
from .models import MyModel
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ['year', 'range', 'main_point']
def to_internal_value(self, data):
mapped_data = {
'year': data.get('Year 2024'),
'range': data.get('Range'),
'main_point': data.get('Main Point')
}
return super().to_internal_value(mapped_data)
def validate_year(self, value):
try:
return int(value)
except ValueError:
raise serializers.ValidationError("Year must be a valid integer.")
def validate_range(self, value):
try:
return int(value)
except ValueError:
raise serializers.ValidationError("Range must be a valid integer.")
def validate_main_point(self, value):
if not isinstance(value, str):
raise serializers.ValidationError("Main point must be a valid string.")
return value
因此,作为用法示例:
my_data = [
{"Year 2024": "2023", "Range": "2", "Main Point": "OK"},
{"Year 2024": "2025", "Range": "3", "Main Point": "OK"},
{"Year 2024": "2022", "Range": "4", "Main Point": "OK"}
]
serializer = MyModelSerializer(data=my_data, many=True)
if serializer.is_valid():
serializer.save()
else:
print(serializer.errors)