Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 16, 2016 11:11:53

dmitry_sulin
Зарегистрирован: 2015-09-10
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменяемый pk в Django

Добрый день! Есть модель джанго - http://pastebin.com/print/g2NxcdzY . Поле position отражает позицию элемента на странице. Есть ли какая-либо возможность сделать это поле изменяемым через админку, автоинкримент по умолчанию должен сохраниться.

Офлайн

#2 Дек. 16, 2016 11:30:12

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Изменяемый pk в Django

А почему бы не сделать его обычным полем просто добавить

primary_key

Field.primary_key
If True, this field is the primary key for the model.

If you don’t specify primary_key=True for any field in your model, Django will automatically add an AutoField to hold the primary key, so you don’t need to set primary_key=True on any of your fields unless you want to override the default primary-key behavior. For more, see Automatic primary key fields.

primary_key=True implies null=False and unique=True. Only one primary key is allowed on an object.

The primary key field is read-only. If you change the value of the primary key on an existing object and then save it, a new object will be created alongside the old one.

И вынести стандартно в админку?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Дек. 16, 2016 11:37:12

dmitry_sulin
Зарегистрирован: 2015-09-10
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменяемый pk в Django

ZerG
А почему бы не сделать его обычным полем просто добавить
Потому что должен быть автоинкремент для поля position, при добавлении нового объекта. Если есть возможность добавить автоинкремент не в primary_key поле, я буду только за. Но ума не приложу как это сделать

Офлайн

#4 Дек. 16, 2016 13:27:18

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Изменяемый pk в Django

dmitry_sulin
Скажите, но почему по-вашему Id не отражает позицию записи в списке? Это же тупо автоикрементный интеджер, то есть ровно то, что вам надо и оно есть в каждой модели по дефолту.



Офлайн

#5 Дек. 16, 2016 14:20:44

dmitry_sulin
Зарегистрирован: 2015-09-10
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменяемый pk в Django

FishHook
dmitry_sulinСкажите, но почему по-вашему Id не отражает позицию записи в списке? Это же тупо автоикрементный интеджер, то есть ровно то, что вам надо и оно есть в каждой модели по дефолту.
Потому что id нельзя вручную изменять через админку. Это нужно иногда для особого порядка расположения элементов на странице. Но чаще всего достаточно того расположения, которое “выдает” автоинкремен

Офлайн

#6 Дек. 16, 2016 16:24:21

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Изменяемый pk в Django

Ну ок, заведите еще одно AutoField поле, http://djbook.ru/rel1.7/ref/models/fields.html#autofield.

Надеюсь, вы понимаете, что при удалении записей из таблицы счетчик автоикремента не сбрасывается? Через какое-то время вы получите таблицу из десяти записей, с номерами записей типа 234234, 939202: который к тому же идут с большими пропусками? Я думаю ваш бухгалтер будет долго репу чесать, что это за фигня. Если у вас информации не много и она не часто изменяется, может лучше save и delete у модели переопределить и скриптом/запросом (пусть даже будет много запросов) выставлять нормальную нумерацию?



Офлайн

#7 Дек. 17, 2016 12:50:26

dmitry_sulin
Зарегистрирован: 2015-09-10
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменяемый pk в Django

FishHook
Ну ок, заведите еще одно AutoField поле, http://djbook.ru/rel1.7/ref/models/fields.html#autofield. Надеюсь, вы понимаете, что при удалении записей из таблицы счетчик автоикремента не сбрасывается? Через какое-то время вы получите таблицу из десяти записей, с номерами записей типа 234234, 939202: который к тому же идут с большими пропусками? Я думаю ваш бухгалтер будет долго репу чесать, что это за фигня. Если у вас информации не много и она не часто изменяется, может лучше save и delete у модели переопределить и скриптом/запросом (пусть даже будет много запросов) выставлять нормальную нумерацию?
Спасибо! Там все таки решили добавлять все порядковые номера (номер расположения на странице, не id) вручную. Правда теперь я не могу сделать миграции. Поле с AutoField уже удалил, а при миграции пишет: “A model can't have more than one AutoField”

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version