Форум сайта python.su
Известно, что django по умолчанию сама определяет поле ID типа целое для модели и назначает это поле первичным ключом. Известно, что можно полностью переопределить поле первичного ключа, включая тип, название, имя поля в БД.
Меня интересует следующее: как можно для модели задать составной первичный ключ - состоящий из нескольких аттрибутов (полей) модели?
Пример:
from django.db import Models
class Item(models.Model):
title = models.CharField(max_length=50)
class Catalog(models.Model):
title = models.CharField(max_length=50)
class ItemCatalog(models.Model):
item = model.ForeignKey(Item)
catalog = model.ForeignKey(Catalog)
CREATE TABLE `test_itemcatalog` (
`item_id` integer NOT NULL PRIMARY KEY,
`catalog_id` integer NOT NULL PRIMARY KEY
)
CREATE TABLE `test_itemcatalog` (
`item_id` integer NOT NULL,
`catalog_id` integer NOT NULL,
PRIMARY KEY(`item_id`, `catalog_id`)
)
Офлайн
vvp91Никак. Джанга не поддерживает (пока) композитные первичные ключи.
как можно для модели задать составной первичный ключ - состоящий из нескольких аттрибутов (полей) модели?
Офлайн
DaevaornОК.vvp91Никак. Джанга не поддерживает (пока) композитные первичные ключи.
как можно для модели задать составной первичный ключ - состоящий из нескольких аттрибутов (полей) модели?
Используйте суррогатный, чем он вам мешает?
Офлайн
vvp91С пунктом 1 понятно:DaevaornОК.
Никак. Джанга не поддерживает (пока) композитные первичные ключи.
Используйте суррогатный, чем он вам мешает?
Но хотелось бы иметь возможность максимально близкого к структуре БД описания атрибутов сущностей в моделях django.
Поэтому:
1) можно ли обеспечить описание в модели альтернативного ключа по двум и более полям? (UNIQUE (item_id, catalog_id))
2) можно ли вообще запретить django создавать первичный ключ по модели?
Если можно 1) или 2), то как это сделать?
class ItemCatalog...
...
class Meta
unique_together = (('item', 'catalog'),)
Офлайн
vvp91нет
2) можно ли вообще запретить django создавать первичный ключ по модели?
Офлайн
vvp91А вообще у вас не правильный подход к проектированию. Если это не легаси система, то гораздо оптимальные исходить из объектной модели и оперировать её сущностями, чем зацикливать на схеме БД до таких деталей. БД - это тупое хранилище данных.
Но хотелось бы иметь возможность максимально близкого к структуре БД описания атрибутов сущностей в моделях django.
Офлайн
DaevaornУважаемый Daevaorn, позвольте мне самому судить о правильности моего подхода к проектированию.
А вообще у вас не правильный подход к проектированию. Если это не легаси система, то гораздо оптимальные исходить из объектной модели и оперировать её сущностями, чем зацикливать на схеме БД до таких деталей. БД - это тупое хранилище данных.
Офлайн
vvp91Конечно, конечно. Лишь хотел дать бесплатный совет, чтобы упростить вам укрощение Джанги.
Уважаемый Daevaorn, позвольте мне самому судить о правильности моего подхода к проектированию.
Офлайн