python - 使用 Django Rest Framework 序列化器更新现有模型

标签 python django csv django-rest-framework

我正在尝试通过定期更新的 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/

相关文章:

python - 使用 Flask 路由查询 sqlite

javascript - 如何在传单弹出窗口中以html形式创建csrf token ?

javascript - "'“(单引号)已转换为‘如何替换或修复它?

python - 外键默认值的 ValueError

excel - 可在 Excel、Chrome 和 Firefox 中解析的日期时间格式

Python:用空行对文件进行排序会导致错误

python - 用零替换空的 csv 列值

python - 如何从 memcached 中删除旧的烧杯 session ?

python - 如何将标签添加到 boto (Amazon S3) 中的 key ?

在 guard 和 result 中具有相同功能的 Python 列表理解