TypeError:无法解压缩不可编辑的响应对象

2024-09-28 22:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将一些数据(从API获取)保存到数据库中。一个列表(名为GetQuestion_response)是从该API获得的,有点像这样(API的实际数据要大得多,所以我在这里显示列表的前两个元素):

GetQuestion_response = [
  {
    "Id":1,
    "GroupId":0,
    "QuestionTitle":"What is your first name?",
    "GroupName":null,
    "QuestionType":"TEXT","IsMappingAvailable":null,"BodyRegion":0,"EnableCalculation":false,
    "Responses":[]
  },
  {
    "Id":2,
    "GroupId":0,
    "QuestionTitle":"And your last name?",
    "GroupName":null,
    "QuestionType":"TEXT","IsMappingAvailable":null,"BodyRegion":0,"EnableCalculation":false,
    "Responses":[
      {'Id': 100, 'ResponseText1': 'aaaa', 'ResponseText2': 'bb', 'IsDeleted': False}
      {'Id': 101, 'ResponseText1': 'zzzz', 'IsDeleted': True}
    ]
  }
]

我的models.py

class Responses(models.Model):
    Answer_Id = models.IntegerField(primary_key=True)
    QuestionId = models.IntegerField(default=0)
    ResponseText1 = models.CharField(max_length=500, null=True, blank=True)
    ResponseText2 = models.CharField(max_length=500, null=True, blank=True)
    ResponseText3 = models.CharField(max_length=500, null=True, blank=True)
    IsDeleted = models.BooleanField(default=False)


class GetQuestion_API(models.Model):
    Question_Id = models.IntegerField(primary_key=True)
    GroupId = models.IntegerField(default=0)
    QuestionTitle = models.TextField()
    GroupName = models.CharField(max_length=500, null=True, blank=True)
    QuestionChoice = [
        ('TEXT', 'TEXT'),
        ('BUTTON', 'BUTTON'),
        ('NUMBER', 'NUMBER')
    ]
    QuestionType = models.CharField(max_length=50, choices=QuestionChoice, default='TEXT', null=True, blank=True)
    IsMappingAvailable = models.CharField(max_length=500, null=True, blank=True)
    BodyRegion = models.CharField(max_length=200, null=True, blank=True)
    EnableCalculation = models.BooleanField(default=False)
    Responses = models.ForeignKey(Responses, on_delete=models.CASCADE, related_name="QuestionReletedResponses", null=True, blank=True)

在我的views.py中:

for i in GetQuestion_response:
        this_Id = i['Id']
        this_GroupId = i['GroupId']
        this_QuestionTitle = i['QuestionTitle']
        this_GroupName = i['GroupName']
        this_QuestionType = i['QuestionType']
        this_IsMappingAvailable = i['IsMappingAvailable']
        this_BodyRegion = i['BodyRegion']
        this_EnableCalculation = i['EnableCalculation']


        GetQuestion_API_obj = GetQuestion_API.objects.create(
            Question_Id = this_Id,
            GroupId = this_GroupId,
            QuestionTitle = this_QuestionTitle,
            GroupName = this_GroupName,
            QuestionType = this_QuestionType,
            IsMappingAvailable = this_IsMappingAvailable,
            BodyRegion = this_BodyRegion,
            EnableCalculation = this_EnableCalculation,
        )

        #Creating Response Object Under question
        for j in i['Responses']:
            if j['Id'] is not None:
                Responses_Id = j['Id']
            if j['ResponseText1'] is not None:
                Responses_ResponseText1 = j['ResponseText1']
            else:
                Responses_ResponseText1 = None
            if j['ResponseText2'] is not None:
                Responses_ResponseText2 = j['ResponseText2']
            else:
                Responses_ResponseText2 = None
            if j['ResponseText3'] is not None:
                Responses_ResponseText3 = j['ResponseText3']
            else:
                Responses_ResponseText3 = None
            if j['IsDeleted'] is not None:
                Responses_IsDeleted = j['IsDeleted']

            Responses_obj, created = Responses.objects.create(
                Answer_Id = Responses_Id,
                QuestionId = this_Id,
                ResponseText1 = Responses_ResponseText1,
                ResponseText2 = Responses_ResponseText2,
                ResponseText3 = Responses_ResponseText3,
                IsDeleted = Responses_IsDeleted,
            )
            if created:
                Responses_obj.save()
                GetQuestion_API_obj.Responses_set.add(Responses_obj)
        if created:
            GetQuestion_API_obj.save()

但不幸的是,views.py中的这段代码指出了如下错误:

TypeError: cannot unpack non-iterable Responses object

当我尝试运行范围为5的主循环时(取列表的前五个元素),它工作得非常好。但是当我在包含所有元素的整个GetQuestion_response列表上运行循环时,它会出现这个错误请告诉我如何解决这个问题?


Tags: noneapiidtruemodelsresponsesthisnull