如果文件数量可能不同,则将多个文件链接到模型的最佳实践

时间:2011-01-21 22:30:51

标签: python django-models filefield

我有一个会计模块,其模型如下:

class Accounting_period(models.Model):
    start_date = models.DateField()
    end_date = models.DateField()
    base_pdf = models.FileField()

我有一个管理功能,每晚午夜运行,一旦过滤(end_date__lt = datetime.datetime.today()),它会通过比萨生成一个发票PDF并将该文件对象保存在base_pdf。 PDF可以通过网站上的会计人员链接获得。

然而,在end_date之后,有些情况会出现,其他工作需要回溯到该发票。然后需要创建一个新的“Back dated”发票,例如“Invoice-2.pdf”,它只有新的回溯总计(所以我们不会混淆会计人员)。我想将其保存到Accounting_period模型,以便我可以轻松地在网页上显示链接。但是,我想到将一堆FileField添加到模型中时会感到畏缩。

我想知道是否有人对这个问题有一个很好的解决方案。我正在设想与M2M相似的东西,对于模板中的每个会计期间,我可以这样做:

templates.py
   <ul>
   {% for invoice in accounting_period_obj.invoices.all %}
      <li><a href="{{invoice.url}}">{{invoice.name}}</a>
   {% endfor %}
   </ul>

ManyToManyField "through"参数看起来很有希望,但我没有链接到另一个模型。

1 个答案:

答案 0 :(得分:0)

您可以使用ForeignKey(一对多关系):

class AccountingPeriodBackDated(models.Model):
    accounting_period= models.ForeignKey(AccountingPeriod, related_name="backdates")
    pdf = models.FileField()

然后使用

templates.py
   <ul>
      <li><a href="{{accounting_period_obj.base_pdf.url}}">{{accounting_period_obj.base_pdf.name}}</a> (Original)</li>
      {% for o in accounting_period_obj.backdates.all %}
         <li><a href="{{o.pdf.url}}">{{o.pdf.name}}</a></li>
      {% endfor %}
   </ul>

有关详细信息,请参阅:https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey