2014-11-11 2 views
0

У меня есть две модели пакетов и транзакций. И транзакция имеет много-к-одному отношение к пакету. Я хочу создать первую транзакцию при создании пакета.Как сохранить экземпляр модели с внешним ключом, когда экземпляр родительской модели создан в Django

def save(self, *args, **kwargs): 
    """ 
    :param args: 
    :param kwargs: 
    :return: 
    """ 

    self.created_on = datetime.datetime.combine(self.created_on.date(), 
               datetime.datetime.now().time()).replace(tzinfo=utc) 
    self.updated_on = datetime.datetime.now().replace(tzinfo=utc) 
    if self.pk is None: 
     from girvi.models import Transaction 
     t = Transaction(type='0', description='0', 
         amount=self.total_worth, packet=self.id, 
         created_on=self.created_on, updated_on=self.updated_on, 
         remark='First amount', roi_charged=self.roi_charged, 
         min_int_period=self.min_int_period) 
     t.save() 
    return super(Packet, self).save(*args, **kwargs) 

Как создать экземпляр транзакции при создании экземпляра пакета, чтобы первая транзакция была автоматически добавлена ​​при создании нового пакета.

+1

Ну, похоже, вы уже это делаете. Что не работает? –

+0

Возможно, что вы хотите сделать, это вызвать 'super (Packet..' перед созданием транзакции? –

ответ

1

Перед созданием транзакции вам необходимо создать объект Packet (то есть вызвать метод super()). Таким образом вы можете предоставить правильный объект пакета для создаваемой транзакции.

if self.pk is None: 
     from girvi.models import Transaction 
     new_packet = super(Packet, self).save(*args, **kwargs) 
     t = Transaction(type='0', description='0', 
         amount=self.total_worth, packet=new_packet, 
         created_on=self.created_on, updated_on=self.updated_on, 
         remark='First amount', roi_charged=self.roi_charged, 
         min_int_period=self.min_int_period) 
     t.save() 
    return 
Смежные вопросы