ФорумПрограммированиеPythonDjango → Дефолтное значение для FK полей

Дефолтное значение для FK полей

  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 27 апреля 2015 г. 12:44, спустя 19 минут 40 секунд

    пишу в миграцию код, который проверяет, что дефолтовый fk существует и если нет, то создаёт его. или можно в той же миграции выбирать дефолтовое значение из существующих, если есть. короче, мне кажется, что миграции идеальное место, чтобы с таким возиться)

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 27 апреля 2015 г. 12:59, спустя 14 минут 56 секунд

    если у тебя появилась потребность дефолт значени FK, значит база спроектирована неверно. И тебе понадобится еще уйма всякиого рода пиздецов и жизнь твоя никчемная. Короче расодимся, не на что смотреть.

    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 27 апреля 2015 г. 13:38, спустя 38 минут 35 секунд

    @phpdude, в том то и дело, что нет такой потребности. При этом есть потребность, чтобы fk был обязательный, поэтому null=True не катит, но миграция при этом требует обязательного дефолтного значения, что в целом похуй - можно тупо 1 подсунуть, но перфекционизм не позволяет удовлетворится этим решением.

    А городить огород и править миграции, как прелагает Синклер, тоже не охота, ибо все это лишние и главное бессмысленные телодвижения.

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 27 апреля 2015 г. 14:04, спустя 25 минут 36 секунд

    @AlexB, fk=1? а ты всегда уверен что у тебя foreign entry с id=1 всегда существует? не устойчивое предположение на мой взгляд.

    А вот утверждение что вы спроектировали базу, а потом вдруг поняли что нужно добавить foreign key - проект не продуман и fk это не единственная проблема в проекте 100%

    Сапожник без сапог
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 27 апреля 2015 г. 14:19, спустя 15 минут 20 секунд

    можно сделать 0 для дефоулт значения fk - но мне кажется fk сторяется из значения полей, поэтому речь идет о дефолтном значении полей. 0 != null так что может годится.
    А вообще я поддерживаю дуда

  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 27 апреля 2015 г. 14:23, спустя 4 минуты 3 секунды

    @AlexB, fk=1? а ты всегда уверен что у тебя foreign entry с id=1 всегда существует? не уверенное предположение на мой взгляд.

    @phpdude, конечно не уверен. Собственно поэтому и возник вопрос, поэтому и говорю, что перфекционизм не позволяет с этим смириться.
    А единичка эта только, чтоб мигратор дурацких вопросов не задавал. А потом по логике приложения FK всегда будет только явно передаваться и похуй какой там дефолт.

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 27 апреля 2015 г. 14:28, спустя 4 минуты 56 секунд

    @AlexB, ну если нужен такой грязный хак, то очевидно нужно null=True и default = None.

    Сапожник без сапог
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 27 апреля 2015 г. 14:29, спустя 1 минуту 30 секунд

    аааа, это про джангу вашу, не заметил сразу

  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 27 апреля 2015 г. 14:35, спустя 5 минут 23 секунды

    @AlexB, ну если нужен такой грязный хак, то очевидно нужно null=True и default = None.

    @phpdude, ИМХО еще более неправильно, чем default=1 ибо даст nullable поле в базе, что ни в какие ворота ...

    Спустя 332 сек.

    В общем default=None тоже катит, на этом и успокоюсь ... без null=True

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 27 апреля 2015 г. 14:42, спустя 7 минут 32 секунды

    @phpdude, ИМХО еще более неправильно, чем default=1 ибо даст nullable поле в базе, что ни в какие ворота ...

    @AlexB, учитывая что в нормальном мире ситуации из топика вообще не должно происходить, то это решение хотя бы не даст тебе неконсистентность данных. Ты хоть отдаешь себе отчет в том что такое id=1 для полей проставить?)))) это же реальное значение для реальных данных. Потом фильтровать то как? пизда в общем а не вариант это имхо. Как ты потом разделишь реальные единички и вот эти, для миграции которые?

    Спустя 19 сек.

    если уж и ставить число, то -1 тогда вообще.

    Спустя 27 сек.

    чтобы разделить срез данных которые для миграции были прошиты и реальные данные.

    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 27 апреля 2015 г. 14:50, спустя 7 минут 48 секунд

    Дык я про тот случай, когда миграция никаких данных не создает, а только поле добавляет.
    В общем ладно, проехали, default=None меня более менее удовлетворяет и твоих опасений не случится и в базе данных все нормально и мигратор не пристает.

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 27 апреля 2015 г. 14:54, спустя 3 минуты 48 секунд

    Дык я про тот случай, когда миграция никаких данных не создает, а только поле добавляет.

    @AlexB, мигратор так или иначе создает данные путем добавления поля с дефолт значением. Он создает не сами данные, а ненужные связи если там реальный fk указан. В общем я не люблю такое. Нулл тут лучше. или -1

    Сапожник без сапог
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 27 апреля 2015 г. 15:07, спустя 12 минут 45 секунд

    Использую все варианты из вышеперечисленных, зависит от конкретной ситуации и проекта:

    • default=0 (либо какое-то другое число, например на пыхе группа Пользователи=4, то при внедрении где-либо групп, я бы указал 4)
    • null=True
    • Правлю миграции, либо несколько миграций. Например, сначала ставлю в 0, потом мигрирую данные откуда-то, как-то так
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 27 апреля 2015 г. 17:03, спустя 1 час 55 минут 52 секунды

    миграция при этом требует обязательного дефолтного значения

    @AlexB, с тех пор, как я стал писать миграции сразу в SQL, мои волосы стали мягкими и шелковистыми

    не всё полезно, что в swap полезло

Пожалуйста, авторизуйтесь, чтобы написать комментарий!