Миграция моделей Django генерируется после установки значения False для managed

<<0>>>В

моем проекте django модели Form, FormSubmission, CmsEvent находятся в базе данных postgres, а модели CmsEventOrder, CmsEventPayment - в другой базе данных postgres.<<<1>>> &lt;

<<0>>>Когда

я создаю миграции, миграции создаются для всех моделей, в то время как они должны создаваться только для CmsEventOrder и CmsEventPayment<<<1>>> &lt;

<<0>>>Теперь

модели CmsEventOrder и CmsEventPayment имеют внешний ключ к 3 другим моделям. Но остальные 3 модели имеют управляющие false, теперь мне ссылаться на них? Генерируются ли миграции из-за внешних ключей? <<<1>>> &lt;

<<0>>>Это

мое мнение<<<1>>> &lt;
class CreateOrderView(APIView):
    def post(self, request):
        try:
            # Extract data from request
            amount = int(request.data.get('amount', 0)) * \
                100  # Convert to paise
            currency = request.data.get('currency', 'INR')
            receipt_id = "receipt_id_" + ''.join(random.choices(
                string.ascii_letters + string.digits, k=12))
            notes = request.data.get('notes', {})
            event_id = request.data.get('event_id')
            form_submission_id = request.data.get('form_submission_id')

            if amount <= 0:
                return Response({"error": "Amount must be greater than zero."}, status=status.HTTP_400_BAD_REQUEST)

            # Validate event and form submission
            event = get_object_or_404(CmsEvent, id=event_id)
            form_submission = get_object_or_404(
                    FormSubmission, id=form_submission_id)

            # Initialize Razorpay client
            client = get_razorpay_client()

            # Create an order
            order_data = {
                'amount': amount,
                'currency': currency,
                'receipt': receipt_id,
                'notes': notes
            }
            order = client.order.create(order_data)

            # Save order to database
            CmsEventOrder.objects.create(
                order_id=order['id'],
                receipt_id=receipt_id,
                # Convert back to original currency
                amount=order['amount'] / 100,
                amount_due=order['amount_due'] / 100,
                currency=order['currency'],
                status=order['status'],
                notes=notes,
                event=event,
                form_submission=form_submission
            )

            return Response(order, status=status.HTTP_201_CREATED)

        except Exception as e:
            logger.error("Failed to create order", error=str(e))
            return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
<<0>>> &lt;

<<0>>>А

это ниже мои модели<<<1>>> &lt;

<<0>>>А

это мой DB-маршрутизатор<<<1>>> &lt;
import structlog

logger = structlog.get_logger("db_router")

class TerrumCMSRouter:
    """
    A database router to direct read operations to the 'terrum_cms' database
    and prevent any write operations for models in the 'cms' app.
    """

    def db_for_read(self, model, **hints):
        if model._meta.app_label == "cms":
            logger.debug(f"Read operation routed to 'terrum_cms' for model '{model.__name__}'")
            return "terrum_cms"
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label == "cms":
            logger.warning(f"Write operation blocked for model '{model.__name__}' in app 'cms'")
            return None
        return None

    def allow_relation(self, obj1, obj2, **hints):
        db_list = {"default", "terrum_cms"}
        if obj1._state.db in db_list and obj2._state.db in db_list:
            return True
        return False

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label == "cms" and db == "terrum_cms":
            logger.warning(f"Migrations disallowed for app 'cms' in database 'terrum_cms'")
            return False
        return True
<<0>>> &lt;

<<0>>>Ниже python3 manage.py makemigrations payments приведены

файлы миграции, создаваемые командой <<<1>>>><<2>>> &lt;

<<0>>>Миграционный

файл в разделе app/payments<<<1>>> &lt;

<<0>>>Я app/cms превысил

лимит символов, поэтому вот файл переноса под <<<1>>>на pastebin<<<2>>> &lt;

<<0>>><<<1>>>https://pastebin.com/sdQ0wZCG<<<2>>><<<3>>> &lt

;

<<0>>>Я

мог бы получить его, если бы он создавал миграции для моделей CmsEvent, Form, FormSubmission, но он создает их даже для Media, ShoppingCategory, Brand и BrandRelationship<<<1>>> &lt;

Я не думаю, что этот атрибут будет делать то, что вы хотите .. если вы хотите, чтобы у вас не было файлов миграции для некоторых ваших моделей, вам нужно будет установить для атрибута abstract значение True в этом случае это не будут создаваться файлы миграции, вы можете ознакомиться с официальной документацией здесь они говорят только о том, что миграция этой модели не будет выполняться, но они не сказали, что она не будет генерировать файл миграции.

В любом случае, проверьте этот вопрос он говорит точно так же (вы должны установить abstract=True в метаклассе model)

И, пожалуйста, уточняйте версии ваших библиотек (хотя версия django указана в файлах миграции, но вы должны указать ее в своем вопросе более четко)

Вернуться на верх