这是我的模型:客户端
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块中创建的客户端对象添加到我的数据库中。我不知道为什么我无法序列化这个对象并保存它。
答案 0 :(得分:0)
要创建新对象,您需要创建ClientSerializer
而不是Client
实例,而是创建原始数据。
serializer = ClientSerializer(data=dict_from_row)
if serializer.is_valid():
serializer.save()
(当您想要更新时,如果要序列化对象或实例以及数据,则传递实例。)
查看csv.DictReader,dict_from_row
即可免费提供{{1}}。
我希望有所帮助。