这是我的模特
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
的{{1}}对象,另一个具有相同{{1 }},其Indirect Expense
值为by
,应自动创建...
这行代码给我一个错误:
to
错误:
'Profit & Loss A/c'
谁能告诉我如何在pre_save信号中获取外键对象?
谢谢
答案 0 :(得分:1)
当您只希望返回一个结果时,将使用get()。 因此,您应该使用其他一些唯一的输入,这些输入将返回您期望的唯一的唯一结果。
或者,如果您实际上希望返回多个结果,请改用filter()方法。像
Ledger1.objects.filter(name='Profit & Loss A/c')
但是在您的情况下,似乎只预期有1个结果,所以我建议使用唯一的输入,否则一种解决方法是:-
Ledger1.objects.filter(name='Profit & Loss A/c').first()
如果您尝试实现的逻辑类型还可以的话,这将返回仅是第一个获取的结果的单个结果。