def backwards(self, orm): from mongoengine import Document, fields class InvoiceBaseGroup(Document): quotation = fields.ReferenceField("Quotation") down_payment_invoices = fields.ListField(fields.ReferenceField("DownPaymentInvoice")) invoice = fields.ReferenceField("Invoice") invoices_cancelled = fields.ListField(fields.ReferenceField("Invoice")) credit_notes = fields.ListField(fields.ReferenceField("CreditNote")) for group in InvoiceBaseGroup.objects(): if group.quotation: kwargs = dict() if group.invoice: kwargs.update(set__related_invoice=group.invoice) if group.invoices_cancelled: kwargs.update(set__related_invoices_cancelled=group.invoices_cancelled) if group.down_payment_invoices: kwargs.update(set__down_payments=group.down_payment_invoices) if kwargs: group.quotation.update(**kwargs) if group.down_payment_invoices or group.invoice: kwargs = dict() if group.credit_notes: kwargs.update(set__related_credit_note=group.credit_notes[0]) if kwargs: for down_payment_invoice in group.down_payment_invoices: down_payment_invoice.update(**kwargs) if group.invoice: group.invoice.update(**kwargs) if group.credit_notes: for credit_note in group.credit_notes: if credit_note._data.get('related_to'): credit_note.update(set__related_invoice=dereference(credit_note._data.get('related_to'), Invoice)) else: credit_note.update(set__related_invoice=group.invoice)