我正在尝试通过定期更新的 CSV 来更新大量模型。现在,CSV 的初始上传非常有效,所有模型都已正确写入数据库。但是,当我尝试在创建模型后更新模型时,我的 serializer.is_valid()
返回错误 ReturnDict([('inventory_number', [u'This field must be独一无二。'])])
.
因此我的问题是:如何更新我已经通过序列化器创建的模型?
模型.py:
class MyModel(models.Model):
inventory_number = models.IntegerField(primary_key=True)
location = models.CharField(max_length=40, blank=True)
views.py:
file_obj = request.data['file']
lines = csv.reader(file_obj, delimiter=",")
for line in lines:
data = {
'inventory_number': line[0],
'location': line[1]
}
serializer = self.serializer_class(data=data)
if serializer.is_valid():
MyModel.objects.save_model(**serializer.validated_data)
else:
print serializer.errors
最后,我对 Django 和 Django-Rest-Framework 比较陌生,因此任何有关使用序列化器的见解/技巧都值得赞赏。感谢您抽出时间。
最佳答案
首先尝试获取现有实例,如果存在则更新它,否则创建它。
这个post可能会有帮助
解决方案如下所示:
if serializer.is_valid():
myinst, created = MyModel.objects.get_or_create(**serializer.validated_data)
myinst.save()
您可能想让您的方法更简单:
for line in lines:
myinst, created = MyModel.objects.get_or_create(inventory_number = line[0])
myinst.location = line[1]
myinst.save()
关于python - 使用 Django Rest Framework 序列化器更新现有模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31249631/