Одна модель - несколько таблиц: Django ORM против SQL-запроса
Как сделать несколько таблиц с одной моделью
Я знаю, что на этот вопрос уже отвечали раньше... но около 6 лет назад и многое было раскрыто об этом.
Например, как обрабатывать миграции, панель администратора, сериализацию данных? и все CRUD методы
Я пробовал с sql запросом (я имею в виду буквальное написание sql запроса в view.py) и он работает нормально... но я хочу знать Django способ сделать это
Также, если SQL запрос предпочтительнее, чем Django ORM, пожалуйста, предложите мне лучший код, чем тот, что я пробовал раньше
Views.py
class categoryProduct(generics.GenericAPIView):
def post(self, request):
params = request.query_params
stock_id = request.data.get("pharmacy_id")
sort_by = request.data.get("sort_by")
page = int(params.get("page", 1))
per_size = params.get("per_size", 10)
category = params.get("category")
sub_category = params.get("sub_category")
cursor = connection.cursor()
query = "SELECT * FROM stock_" + str(stock_id) + " a
JOIN product b ON a.product_id = b.id JOIN category c ON b.category = c.id JOIN
sub_category d ON b.sub_category = d.id WHERE b.category=" + str(
category) + " AND b.sub_category=" + str(sub_category)
cursor.execute(query)
records = cursor.fetchall()
fields = [field[0] for field in cursor.description]
all_response = [dict(zip(fields, record)) for record in records]
if sort_by == "price_l2h":
all_response = sorted(all_response, key=lambda a: a['selling_price'])
elif sort_by == "price_h2l":
all_response = sorted(all_response, key=lambda a: a['selling_price'], reverse=True)
elif sort_by == "name_a2z":
all_response = sorted(all_response, key=lambda a: a['product_name'])
elif sort_by == "name_z2a":
all_response = sorted(all_response, key=lambda a: a['product_name'], reverse=True)
paginator_object = Paginator(all_response, per_size)
if page > paginator_object.num_pages:
page = paginator_object.num_pages
elif page <= 0:
page = 1
objects_to_page = paginator_object.page(page)
response = []
for instance in objects_to_page:
c1 = dict(list(instance.items())[:5])
temp = dict(list(instance.items())[5:])
sc2 = dict(list(temp.items())[:3])
temp2 = dict(list(temp.items())[3:])
p3 = dict(list(temp2.items())[:26])
s4 = dict(list(temp2.items())[26:])
data = {'category': c1, 'sub_category': sc2, 'product': p3, 'stock': s4}
response.append(data)
return Response(
{"status": 200, "message": "Success","data": response})