Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:如何在pre_save信号中传递外键值?_Python_Django_Django Models - Fatal编程技术网

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

Python Django:如何在pre_save信号中传递外键值?,python,django,django-models,Python,Django,Django Models,这是我的模型: 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.CASCA

这是我的模型:

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)
我想传递一个预保存信号,即每当创建一个日记账对象时,如果该日记账对象的Group1对象名为间接费用,则应自动创建另一个具有相同by to值“损益账”的日记账

这行代码给了我一个错误:

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

get() returned more than one Ledger1 -- it returned 2!
有人能告诉我如何在预保存信号中获取外键对象吗


谢谢

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

或者,如果您确实希望返回多个结果,请改用filter方法。大概

Ledger1.objects.filter(name='Profit & Loss A/c')
但在您的情况下,似乎只需要1个结果,因此我建议使用唯一的输入或解决方法:

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

这将返回一个结果,这只是第一个获取的结果,如果您尝试实现的逻辑没有问题的话。

get将返回一个实例,但是查询u pass返回2个结果,这导致了上述异常,你应该在get中使用一些唯一的值。我需要过滤一些东西吗?我想将ledger1模型的对象名损益A/c传递给日记账模型的feild…有没有其他方法可以这样做呢?这会导致递归错误错误错误错误:调用Python对象时超过了最大递归深度…我只想获取从账本1对象中命名损益账。