首页 文章

在django中将数据从1个模型批量复制到另一个模型

提问于
浏览
0

我有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行,在execute_from_command_line(sys.argv)文件“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“,第348行,在run_from_argv中自执行(* args,** cmd_options)文件”C:\ Python27 \ lib \ site-packages \ django \ core \ management \ base.py“,第399行,执行输出= self.handle(* args,选项)文件”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行,发送内容Voicebalance activeMVNO = Functions.updateNonRuleMatchRecordByTarif (categoryId,type)文件“C:\ Users \ Development \ Desktop \ python \ crons \ includes \ functions.py”,第49行,在updateNonRuleMatchRecordByTarif函数.truncateUpdateVoice(loginIdList)文件“C:\ Users \ Development \ Desktop \ python \ crons \ includes \ functions.py“,第64行,truncateUpdateVoice SubscriberBalanceProcess.objects.bulk_create(SubscriberBalance.objects.filter(VOICE_STATUS ='N',SMS_FLAG = 1,TENANT_ID__in = loginIdL ist))文件”C:\ Python27 \ lib \ site-packages \ django \ db \ models \ manager.py“,第122行,在manager_method中返回getattr(self.get_queryset(),name)( args,* kwargs)文件”C:\ Python27 \ lib \ site-packages \ django \ db \ models \ query.py“,第447行,在bulk_create中self._batched_insert(objs_with_pk,fields,batch_size)文件”C:\ Python27 \ lib \ site-packages \ django \ db \ models \ query .py“,第1056行,在_batched_insert中使用= self.db)文件”C:\ Python27 \ lib \ site-packages \ django \ db \ models \ manager.py“,第122行,在manager_method中返回getattr(self.get_queryset (),name)(* args,** kwargs)文件“C:\ Python27 \ lib \ site-packages \ django \ db \ models \ query.py“,第1039行,在_insert中返回query.get_compiler(using = using).execute_sql(return_id)文件”C:\ Python27 \ lib \ site-packages \ django \ db \ models \ sql \ compiler.py“,第1059行,在execute_sql中为sql,params在self.as_sql()中:文件”C:\ Python27 \ lib \ site-packages \ django \ db \ models \ sql \ compiler.py “,第1019行,在as_sql中为obj in self.query.objs文件”C:\ Python27 \ lib \ site-packages \ django \ db \ models \ sql \ compiler.py“,第968行,在pre_save_val中返回field.pre_save (obj,add = True)文件“C:\ Python27 \ lib \ site-packages \ django \ db \ models \ fields__init __ . py”,第702行,在pre_save中返回getattr(model_instance,self.attname)AttributeError:'SubscriberBalance'对象没有属性'TOTAL_REMAIN_VOICE'

1 回答

  • 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)
    

相关问题