2015-07-06 4 views
1

Я пытаюсь обновить большой список моделей через CSV, который периодически обновляется. В настоящий момент начальная загрузка CSV работает как шарм, и все модели правильно записываются в БД. Однако, когда я пытаюсь обновить модели после их создания, мой serializer.is_valid() возвращает ошибку ReturnDict([('inventory_number', [u'This field must be unique.'])]).Обновление существующих моделей с помощью Django Rest Framework Сериализаторы

Таким образом, мой вопрос: Как обновить модели, которые я уже создал через Serializers?

models.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, так что любые идеи/советы, как к использованию Сериализаторы оценены. Спасибо за ваше время.

+1

Вы пытаетесь создать новые объекты с этим кодом. Вам понадобится 'some_obj = MyModel.objects.get (строка [0])', затем измените значения и сохраните их. – IanAuld

ответ

1

Сначала попробуйте получить существующий экземпляр и обновить его, если он существует, иначе создайте его.
Это 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() 
Смежные вопросы