Django:父对象没有属性子对象集

2024-10-04 05:29:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这两种型号:

class Periodo(models.Model):
    # id usato per identificare i documenti
    # periodo rilevato in fattura
    data_i_p = models.DateField('data inizio', blank=True)
    data_f_p = models.DateField('data fine ', blank=True)
    mc_p = models.DecimalField('mc', max_digits=7, decimal_places=0, blank=True, default=0)
    idfatt = models.ForeignKey(FattAqp, verbose_name="fattura AQP", on_delete=models.CASCADE, related_name='periodo_rel')
    descr = models.CharField('descrizione', max_length=50)

    objects = models.Manager()

    class Meta:
        verbose_name = 'Periodo'
class DettFAqp(models.Model):
    imponibile = models.DecimalField('imponibile', max_digits=8, decimal_places=2, default=0)
    iva = models.DecimalField('%IVA', max_digits=4, decimal_places=2, default=10)
    mc = models.DecimalField('qtà (gg/mc)', max_digits=7, decimal_places=0, blank=True, default=0)
    voce = models.ForeignKey(VoceAqp, verbose_name="metodo di ripart.", on_delete=models.CASCADE)
    periodo = models.ForeignKey(Periodo, verbose_name="Periodo in fattura", on_delete=models.CASCADE,
                                related_name='dettfaqp', help_text=u"periodo cui la voce appartiene")
    rigo = models.DecimalField('rigo', max_digits=2, decimal_places=0, default=0, help_text=u"rigo di fattura")

当我尝试访问与父对象相关的集合时,我会出现以下错误:


>>> p=Periodo.objects.get(pk=2)
>>> p
<Periodo: consumo accertato in 344 gg>
>>> p.dettfaqp_set.all()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
    p.dettfaqp_set.all()
AttributeError: 'Periodo' object has no attribute 'dettfaqp_set'

有什么建议吗


Tags: nameintruedefaultdatamodelsmaxdecimal
3条回答

您已将DettFAqp.periodorelated_name设置为"dettfaqp"。您应该使用该属性p.dettfaqp.all()

您指定了一个^{} [Django-doc]

class DettFAqp(models.Model):
   # …
   periodo = models.ForeignKey(
       Periodo,
       verbose_name='Periodo in fattura',
       on_delete=models.CASCADE,
       related_name='dettfaqp',
       help_text='periodo cui la voce appartiene'
    )

因此,这意味着反向关系不再是dettfaqp_set,而是dettfaqp,因此您可以通过以下方式访问此关系:

p.dettfaqp.all()

如果您正在使用related_name属性,则不需要在调用结束时包含\u set:只需使用以下命令:

p.dettfaqp.all()

它应该会起作用

只有在尚未为ForeignKey指定related_name时才使用\u set,在您的示例中,它将是:

p.periodo_set.all()

相关问题 更多 >