Миграция моделей Django генерируется после установки значения False для managed
<<0>>>В
моем проекте django модели Form, FormSubmission, CmsEvent находятся в базе данных postgres, а модели CmsEventOrder, CmsEventPayment - в другой базе данных postgres.<<<1>>> <<<0>>>Когда
я создаю миграции, миграции создаются для всех моделей, в то время как они должны создаваться только для CmsEventOrder и CmsEventPayment<<<1>>> <<<0>>>Теперь
модели CmsEventOrder и CmsEventPayment имеют внешний ключ к 3 другим моделям. Но остальные 3 модели имеют управляющие false, теперь мне ссылаться на них? Генерируются ли миграции из-за внешних ключей? <<<1>>> <<<0>>>Это
мое мнение<<<1>>> <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>>>
<
<<0>>>А
это ниже мои модели<<<1>>> <<<0>>>А
это мой DB-маршрутизатор<<<1>>> <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>>>
<
<<0>>>Ниже python3 manage.py makemigrations payments
приведены
<<0>>>Миграционный
файл в разделе app/payments<<<1>>> <<<0>>>Я app/cms
превысил
<<0>>><<<1>>>https://pastebin.com/sdQ0wZCG<<<2>>><<<3>>> <
;<<0>>>Я
мог бы получить его, если бы он создавал миграции для моделей CmsEvent, Form, FormSubmission, но он создает их даже для Media, ShoppingCategory, Brand и BrandRelationship<<<1>>> <Я не думаю, что этот атрибут будет делать то, что вы хотите .. если вы хотите, чтобы у вас не было файлов миграции для некоторых ваших моделей, вам нужно будет установить для атрибута abstract
значение True
в этом случае это не будут создаваться файлы миграции, вы можете ознакомиться с официальной документацией здесь они говорят только о том, что миграция этой модели не будет выполняться, но они не сказали, что она не будет генерировать файл миграции.
В любом случае, проверьте этот вопрос он говорит точно так же (вы должны установить abstract=True в метаклассе model)
И, пожалуйста, уточняйте версии ваших библиотек (хотя версия django указана в файлах миграции, но вы должны указать ее в своем вопросе более четко)