簡體   English   中英

如何在Django Rest框架中沒有JSON數據的情況下顯式初始化模型對象

[英]How to initialise model objects explicitly without json data in 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塊中創建的客戶端對象添加到數據庫中。 我不確定為什么我不能序列化此對象並保存它。

要創建一個新對象,您需要創建不帶Client實例而是使用原始數據的ClientSerializer

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

(當您要序列化一個對象時傳遞一個實例,或者在您想要更新時傳遞一個實例加數據。)

看看csv.DictReader ,它會為您提供dict_from_row而無需多費周折。

希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM