在django

时间:2016-01-12 09:35:45

标签: django model

我有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'

1 个答案:

答案 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)