Лучшая практика для связывания нескольких файлов с моделью, если количество файлов может варьироваться - PullRequest
1 голос
/ 22 января 2011

У меня есть модуль учета с такой моделью:

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

У меня есть функция управления, которая запускается каждую ночь в полночь, и один раз фильтр (end_date__lt = datetime.datetime.today ()) генерирует ееPDF счета-фактуры через pisa и сохраняет этот объект файла в base_pdf.PDF-файл доступен по ссылке на сайте для бухгалтера.

Однако после окончания_даты возникают случаи, когда дополнительная работа должна быть возвращена в тот же счет.Затем необходимо создать новый «Счет с обратным датированием», например «Счет-фактура-2.pdf», который имеет только новые итоги с обратным датом (поэтому мы не путаем учетщиков).Я хочу сохранить это в модели Accounting_period, чтобы я мог легко показывать ссылки на веб-странице.Тем не менее, я смущаюсь мыслью о добавлении в модель группы файловых полей.

Мне интересно, есть ли у кого-нибудь хорошее решение этой проблемы.Я предполагаю что-то похожее на 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 голосов
/ 06 июня 2011

Вы можете использовать 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

...