LINUX.ORG.RU

Django, syncdb и дефолтные значения в моделях!

 ,


0

2

Всем здасьте)!

У меня вопрос к многоуважаемому lor-django-сообществу: «Каким образом можно создаватьзаписис в БД с дефолтными значениями сразу во время создания таблиц (во время выполнения syncdb)» ?

Есть у меня приложение А, в нем есть пять полей (filed_1 .. filed_5) в которых я прописываю некоторые значения по умолчанию. Как мне нагенерить таких записей во время выполнения syncdb?

Есть ли возможность делать ч-то-лтбо с данными в БД, вовремя или сразу после выполнения syncdb?



Последнее исправление: cetjs2 (всего исправлений: 3)
Ответ на: комментарий от Sektor

Нифига!

Есть пустая база.

есть fixture-файл (initial_data):

[
  {
    "model": "myapp.MyModel",
    "pk": 1,
    "fields": {
      "battery": "John",
      "capacity": "Lennon"
    }
  },

  {
    "model": "myapp.MyModel",
    "pk": 2,
    "fields": {
      "battery": "Johnsdsd",
      "capacity": "Lennonsdgsdgsdg"
    }
  }
]

Создал файл начальной миграции для приложения myapp. Пытаюсь загрузить данные в БД:

./manage.py migrate myapp

django.db.utils.IntegrityError: Problem installing fixtures: The row in table 'myapp_mymodel' with primary key '1' has an invalid foreign key: myapp_mymodel.myapp_ptr_id contains a value '1' that does not have a corresponding value in myapp_myapp.id.
Sektor
() автор топика
Ответ на: комментарий от Sektor

К превеликому сожалению, телепаты ЛОРа в отпуске с прошлой недели. Посему, модель - в студию.

heilkitty ★★
()
Ответ на: комментарий от anonymous

Да, блин! Таблицы пустые! В том-то и вопрос. Можно ли автоматически заполнять пустые таблицы начальными значеними во время выполения syncdb или migrate?!

Sektor
() автор топика
Ответ на: комментарий от Sektor

Нет. syncdb только выполняет создание таблиц из моделей. migrate работает только со схемой, для данных он не пригоден. Можешь написать свой костыль

anonymous
()
Ответ на: комментарий от Sektor

Проблема с порядком загрузки фикстур. Если у тебя модель с FK, то она должна создаваться второй, а не первой.

Читайте выхлоп, господа.

C1nde
()
Ответ на: комментарий от C1nde

Проблема с порядком загрузки фикстур. Если у тебя модель с FK, то она должна создаваться второй, а не первой.

Нет. Но у меня модель наследуется от другой.

class Product(models.Model):
    ...


class Battery(Product):
    title = models.CharField(u"Название категории", default=u"Батарея", max_length=64)
    slug = models.SlugField(u"Ссылка для категории", default="battery", max_length=64)
    ...
Sektor
() автор топика
Ответ на: комментарий от Sektor

FK покажи у обоих моделей. libastral плохо работает по пятницам

C1nde
()
Ответ на: комментарий от Sektor

Нет. Но у меня модель наследуется от другой.

У тебя наследуется только слабоумие.

Представь, что у тебя есть автомобиль. И ты, наркоман, сериализуешь его в JSON. Простые детали сериализуются обычными строками, сложные, типа двигателя - по артикулу. У тебя в фикстуре в поле «engine» ссылка на двигатель с артикулом #1. Но справочник двигателей ПУСТОЙ. Врубаешься?

anonymous
()
Ответ на: комментарий от anonymous

Я понимаю. Возможно я и пытаюсь в фикстурах заполнить записи, которых нет. Забудь об этом, и скажи лучше, каким образом я могу заполнять только что созданные, пустые и девственно чистые таблицы, начальными значениями, при выполнеии syncdb или migrate?

Sektor
() автор топика
Ответ на: комментарий от Sektor

Ссылка в первом комментарии, там тоже все подробно разжевано.

Перевести?

  • Запускаем проект, идем в админку. Или еще как-то генерируем «начальные значения».
  • С помощью dumpdata, дампим данные в project_dir>/initial_data.json.
  • ...
  • PROFIT! При каждом syncdb/migrate эти данные будут загружаться автоматически.

Если структура модели меняется, вместе с schemamigration нужно создать datamigration, в которой будет происходить переконвертирование данных. Короче, кури South и механизм нативных миграций в 1.7 - в них несколько различается философия и терминология.

Если данные НЕ нужно загружать при каждой migrate, переименуй фикстуру и грузи ее когда надо вручную mamange.py loaddata.

anonymous
()
Ответ на: комментарий от Sektor

Я понимаю.

Ничего ты не понимаешь. Естественно таблицы у тебя пустые. Если в фикстуре объект модели ссылается на другой объект по id (FK), значит в фикстуре должен быть этот «другой» объект именно с таким id.

Попроси кого-нибудь из взрослых, пусть в виде комикса тебе нарисуют, если обычный текст не воспринимаешь.

anonymous
()

Всем спасибо, разобрался чуток.

Sektor
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.