如何在django rest框架中显式初始化模型对象而不使用json数据

时间:2014-05-04 08:53:30

标签: python django django-models django-rest-framework

这是我的模型:客户端

from django.db import models

class Client(models.Model):
    client_code = models.CharField(max_length=20, blank=False)
    client_name = models.CharField(max_length=50, blank=False)
    debit = models.DecimalField(max_digits=19, decimal_places=2)
    credit = models.DecimalField(max_digits=19, decimal_places=2)

这是我的views.py

中的方法
def importClientsFromCSV(request):
    if request.method == 'GET':
        pathToCSV = os.path.dirname(os.path.abspath(__file__)) + '/portfolio.csv'
        with open(pathToCSV, 'rU') as csvfile:
             portfolioreader = csv.reader(csvfile, delimiter=',')
             printer = "Number of Rows = "

             rows = 0
             for row in portfolioreader:
                  try:
                       client = Client.objects.get(client_code=row[0])
                       #Client Exists - Update Details
                       client.debit = row[2]
                       client.credit = row[3]
                       serializer = ClientSerializer(client)
                       if serializer.is_valid():
                           serializer.save()
                           rows = rows + 1
                       except Client.DoesNotExist:
                           client = Client()
                           client.client_code=row[0]
                           client.client_name=row[1]
                           client.debit=row[2]
                           client.credit=row[3]
                           serializer = ClientSerializer(client)
                           if serializer.is_valid():
                               serializer.save()
                               rows = rows + 1
             if rows > 0:
                  return HttpResponse(pathToCSV+", "+printer+str(rows),status=200)
             else:
                  return HttpResponse("Could Not Process",status=404)

我遇到的问题是无法将我在Except块中创建的客户端对象添加到我的数据库中。我不知道为什么我无法序列化这个对象并保存它。

1 个答案:

答案 0 :(得分:0)

要创建新对象,您需要创建ClientSerializer而不是Client实例,而是创建原始数据。

serializer = ClientSerializer(data=dict_from_row)
if serializer.is_valid():
    serializer.save()

(当您想要更新时,如果要序列化对象或实例以及数据,则传递实例。)

查看csv.DictReaderdict_from_row即可免费提供{{1}}。

我希望有所帮助。