我有2个类似架构的模型,我想从model1
批量复制到model2
,但model2
还有3个字段,但我想在这些字段中存储null。
class SubscriberBalanceProcess(models.Model):
VOICE_SOC = models.CharField(max_length=50, null=True)
SMS_SOC = models.CharField(max_length=50, null=True)
DATA_SOC = models.CharField(max_length=50, null=True)
DATE_TIME = models.DateTimeField(auto_now_add=True, blank=True)
TOTAL_REMAIN_VOICE = models.BigIntegerField(default=0, null=True, blank=True)
TOTAL_REMAIN_SMS = models.BigIntegerField(default=0, null=True, blank=True)
TOTAL_REMAIN_DATA = models.BigIntegerField(max_length=100, null=True, blank=True)
class Meta:
db_table = "SUBSCRIBER_BALANCE_PROCESS_TEST"
class SubscriberBalance(models.Model):
VOICE_SOC = models.CharField(max_length=50, null=True)
SMS_SOC = models.CharField(max_length=50, null=True)
DATA_SOC = models.CharField(max_length=50, null=True)
DATE_TIME = models.DateTimeField(auto_now_add=True, blank=True)
FILE_ID = models.CharField(max_length=255, null=True)
class Meta:
db_table = 'subscriber_balance'
SubscriberBalanceProcess.objects.bulk_create(SubscriberBalance.objects.filter(VOICE_STATUS='N', SMS_FLAG=1, TENANT_ID__in=loginIdList))
回溯(最近一次呼叫最后一次):文件" manage.py",第10行,in execute_from_command_line(sys.argv)File" C:\ Python27 \ lib \ site-packages \ django \ core \ management__init __。py", 第353行,在execute_from_command_line中 utility.execute()文件" C:\ Python27 \ lib \ site-packages \ django \ core \ management__init __。py", 第345行,执行中 self.fetch_command(子命令).run_from_argv(self.argv)文件" C:\ Python27 \ lib \ site-packages \ django \ core \ management \ base.py",line 348,在run_from_argv中 self.execute(* args,** cmd_options)文件" C:\ Python27 \ lib \ site-packages \ django \ core \ management \ base.py",line 399,执行中 output = self.handle(* args,** options)File" C:\ Users \ Development \ Desktop \ python \ crons \ management \ commands \ sendsms_voicebalance_process_rule_tarif.py", 第74行,处理中 self.sendsmsVoicebalance()文件" C:\ Users \ Development \ Desktop \ python \ crons \ management \ commands \ sendsms_voicebalance_process_rule_tarif.py", 第30行,发送语音平衡 activeMVNO = Functions.updateNonRuleMatchRecordByTarif(categoryId,type)文件 " C:\用户\发展\桌面\蟒\ crons \包括\ functions.py&#34 ;, 第49行,在updateNonRuleMatchRecordByTarif中 Functions.truncateUpdateVoice(loginIdList)File" C:\ Users \ Development \ Desktop \ python \ crons \ includes \ functions.py", 第64行,在truncateUpdateVoice中 SubscriberBalanceProcess.objects.bulk_create(SubscriberBalance.objects.filter(VOICE_STATUS =' N&#39 ;, SMS_FLAG = 1,TENANT_ID__in = loginIdL ist))文件 " C:\ Python27 \ lib \ site-packages \ django \ db \ models \ manager.py",第122行, 在manager_method中 return getattr(self.get_queryset(),name)(* args,** kwargs)File" C:\ Python27 \ lib \ site-packages \ django \ db \ models \ query.py",第447行, 在bulk_create中 self._batched_insert(objs_with_pk,fields,batch_size)File" C:\ Python27 \ lib \ site-packages \ django \ db \ models \ query.py",第1056行, 在_batched_insert中 using = self.db)File" C:\ Python27 \ lib \ site-packages \ django \ db \ models \ manager.py",第122行, 在manager_method中 return getattr(self.get_queryset(),name)(* args,** kwargs)File" C:\ Python27 \ lib \ site-packages \ django \ db \ models \ query.py",1039行, 在_insert中 return query.get_compiler(using = using).execute_sql(return_id)File" C:\ Python27 \ lib \ site-packages \ django \ db \ models \ sql \ compiler.py", 第1059行,在execute_sql中 for sql,params in self.as_sql():File" C:\ Python27 \ lib \ site-packages \ django \ db \ models \ sql \ compiler.py",line 1019,在as_sql中 对于obj in self.query.objs文件" C:\ Python27 \ lib \ site-packages \ django \ db \ models \ sql \ compiler.py",line 968,在pre_save_val中 return field.pre_save(obj,add = True)File" C:\ Python27 \ lib \ site-packages \ django \ db \ models \ fields__init __。py", 在pre_save中的702行 return getattr(model_instance,self.attname)
AttributeError:' SubscriberBalance'对象没有属性 ' TOTAL_REMAIN_VOICE'
答案 0 :(得分:2)
问题是您无法将SubscriberBalance
个对象提供给SubscriberBalanceProcess
创建功能。
您应该首先使用公共字段的数据创建适当的实例:
queryset = (SubscriberBalance.objects
.filter(VOICE_STATUS='N', SMS_FLAG=1, TENANT_ID__in=loginIdList)
.values('VOICE_SOC', 'SMS_SOC', 'DATA_SOC', 'DATE_TIME', 'FILE_ID'))
new_objects = [SubscriberBalanceProcess(**values) for values in queryset]
SubscriberBalanceProcess.objects.bulk_create(new_objects)