Хауди.Я работаю над миграцией внутренней системы на Django и столкнулся с несколькими морщинами.
Intro
Наша текущая система (биллинговая система) отслеживает двойную бухгалтерию, позволяяпользователи могут вводить данные в виде счетов, расходов и т. д.
Базовые объекты
Итак, у меня есть два базовых объекта / модели:
- JournalEntry
- JournalEntryItems
определяется следующим образом:
class JournalEntry(models.Model):
gjID = models.AutoField(primary_key=True)
date = models.DateTimeField('entry date');
memo = models.CharField(max_length=100);
class JournalEntryItem(models.Model):
journalEntryID = models.AutoField(primary_key=True)
gjID = models.ForeignKey(JournalEntry, db_column='gjID')
amount = models.DecimalField(max_digits=10,decimal_places=2)
Пока все хорошо.Это работает довольно гладко на стороне администратора (встроенная работа и т. Д.)
Переходим к следующему разделу.
Затем у нас есть еще две модели
- InvoiceEntry
- InvoiceEntryItem
InvoiceEntry - это расширенный набор / наследуется от JournalEntry, поэтому я использовал OneToOneField (который мы используем в фоновом режиме на нашем текущем сайте).Это тоже работает довольно гладко.
class InvoiceEntry(JournalEntry):
invoiceID = models.AutoField(primary_key=True, db_column='invoiceID', verbose_name='')
journalEntry = models.OneToOneField(JournalEntry, parent_link=True, db_column='gjID')
client = models.ForeignKey(Client, db_column='clientID')
datePaid = models.DateTimeField(null=True, db_column='datePaid', blank=True, verbose_name='date paid')
Я сталкиваюсь с проблемами при попытке добавить InvoiceEntryItem (который наследуется от JournalEntryItem) к встроенному, связанному с InvoiceEntry.Я получаю сообщение об ошибке:
<class 'billing.models.InvoiceEntryItem'> has more than 1 ForeignKey to <class 'billing.models.InvoiceEntry'>
Как я вижу, InvoiceEntryItem имеет ForeignKey непосредственно для InvoiceEntry.И у него также есть косвенный ForeignKey для InvoiceEntry через отношение JournalEntry 1-> M JournalEntryItems.
Вот код, который я сейчас использую.
class InvoiceEntryItem(JournalEntryItem):
invoiceEntryID = models.AutoField(primary_key=True, db_column='invoiceEntryID', verbose_name='')
invoiceEntry = models.ForeignKey(InvoiceEntry, related_name='invoiceEntries', db_column='invoiceID')
journalEntryItem = models.OneToOneField(JournalEntryItem, db_column='journalEntryID')
Я пытался удалить журнал EntryItem OneToOneField.Это затем удаляет мою способность получить сумму в долларах для этого конкретного InvoiceEntryItem (который хранится только в journalEntryItem).
Я также пытался удалить отношение invoiceEntry ForeignKey.Это удаляет связь, которая позволяет мне видеть InvoiceEntry 1-> M InvoiceEntryItems в строке администратора.Все, что я вижу, - это пустые поля (вместо фактических данных, которые в настоящее время хранятся в БД).
Кажется, что вариант 2 ближе к тому, что я хочу сделать.Но моя неопытность с Джанго, кажется, ограничивает меня.Я мог бы отфильтровать большой пул записей журнала, чтобы увидеть только записи счета.Но было бы очень удобно думать об этом исключительно как о счетах (а не о подмножестве записей в журнале).
Есть мысли о том, как сделать то, что мне нужно?