繁体   English   中英

Django:如何在pre_save信号中传递外键值?

[英]Django:How to pass a foreign key value in pre_save signal?

这是我的模型:

class Ledger1(models.Model):
    creation_Date   = models.DateField(default=datetime.date.today,blank=True, null=True)
    name            = models.CharField(max_length=32)
    group1_Name     = models.ForeignKey(Group1,on_delete=models.CASCADE,null=True,related_name='ledgergroups')

class Journal(models.Model):
    date            = models.DateField(default=datetime.date.today)
    voucher_id      = models.PositiveIntegerField(blank=True,null=True)
    voucher_type    = models.CharField(max_length=100,blank=True)
    by              = models.ForeignKey(Ledger1,on_delete=models.CASCADE,related_name='Debitledgers')
    to              = models.ForeignKey(Ledger1,on_delete=models.CASCADE,related_name='Creditledgers')
    debit           = models.DecimalField(max_digits=10,decimal_places=2,null=True)
    credit          = models.DecimalField(max_digits=10,decimal_places=2,null=True)

这是我的信号:

@receiver(pre_save, sender=Journal)
def pl_journal(sender,instance,*args,**kwargs):
    if instance.Debit != None or instance.Credit != None or instance.By.group1_Name.group_Name == 'Indirect Expense':
        Journal.objects.update_or_create(date=instance.date, voucher_id=instance.id, voucher_type= "Journal",by=instance.by,to=Ledger1.objects.get(name='Profit & Loss A/c'),debit=instance.debit,credit=instance.credit)

我想通过一个pre_save信号,每当Journal被创建的对象,其具有Group1的对象名称Indirect Expense使用相同的另一份杂志byto价值'Profit & Loss A/c'应该自动创建...

这行代码给我一个错误:

Ledger1.objects.get(name='Profit & Loss A/c')

错误:

get() returned more than one Ledger1 -- it returned 2!

谁能告诉我如何在pre_save信号中获取外键对象?

谢谢

当您期望仅返回一个结果时,将使用get()。 因此,您应该使用其他一些唯一输入,该输入将返回您期望的唯一结果。

另外,如果您实际上希望返回多个结果,请改用filter()方法。 就像是,

Ledger1.objects.filter(name='Profit & Loss A/c')

但是在您的情况下,似乎只预期有1个结果,所以我建议使用唯一输入或解决方法:

Ledger1.objects.filter(name='Profit & Loss A/c').first()

如果您尝试实现的逻辑类型可以,那么这将返回仅是第一个获取的结果的单个结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM