Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 10, 2013 10:22:54

andrey16
Зарегистрирован: 2013-09-26
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

django и несколько бд

продолжаю учиться, делая приложение с подачей заявок.
раньше у меня “подающий заказ” вбивался руками. теперь настала пора прикрутить бд с базой клиентов.
чтобы django знал, что помимо дефолтной базы надо пользоваться еще одной, внес соответствующие изменения в файл settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'C:/path/to/folder/mydb.db',
        'USER': '',
        'PASSWORD': '',
        'HOST': '', 
        'PORT': '',  
    },
    'clients': {
        'NAME': 'clients',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'root',
        'PASSWORD': 'root'
    }
}
база клиентов состоит из одной таблицы со столбцами:
ID | NAME | CARD | и т.д.
1 | vasya | 1234 | …
2 | petya | 2344 | …


добавление новых и редактирование старых строк для данной бд не потребуется.
меня интересуют столбцы NAME и CARD. как нетрудно догадаться NAME - это владелец CARD.

а теперь у меня наступает ступор…
1. для работы с бд клиентов мне требуется в models.py создавать class Clients?
...
class Clients(models.Model):
    ID = models.CharField(max_length=50)
    NAME = models.CharField(max_length=50)
    CARD = models.CharField(max_length=50)
...
2. требуется ли создавать для каждого столбца из таблицы свое поле, если меня интересуют только NAME и CARD?
3. как объявить для django, что класс Clients - это таблица из бд clients, а не из бд default?

Отредактировано andrey16 (Окт. 10, 2013 10:24:26)

Офлайн

#2 Окт. 10, 2013 11:06:00

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

django и несколько бд

Ожидаемый вопрос, а зачем две базы городить? Одной мало?



Офлайн

#3 Окт. 10, 2013 11:10:50

andrey16
Зарегистрирован: 2013-09-26
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

django и несколько бд

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

прокомментируйте пожалуйста 3 пункта из стартового сообщения. я что-то заплутал в 3 соснах.

Офлайн

#4 Окт. 10, 2013 11:38:09

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

django и несколько бд

И всё-таки, зачем две базы? Пусть одно приложение пишет, другое читает, какая разница?
В одном проекте делайте модель, в другом симлинк на эту модель.



Офлайн

#5 Окт. 10, 2013 11:43:44

Vaal
От:
Зарегистрирован: 2010-01-07
Сообщения: 21
Репутация: +  -1  -
Профиль   Отправить e-mail  

django и несколько бд

Можно использовать роутинг баз, вручную в запросе, через менеджер модели …
https://docs.djangoproject.com/en/1.5/topics/db/multi-db/#database-routers



Офлайн

#6 Окт. 11, 2013 09:36:31

andrey16
Зарегистрирован: 2013-09-26
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

django и несколько бд

FishHook, пока так и сделал.
Vaal, благодарю. будем разбираться
—————

class Card(models.Model):
    ...
    NAME = models.CharField(max_length=50, verbose_name='Клиент')
    CARDNUMBER = models.CharField(max_length=50, primary_key=True, verbose_name='№ карты')
    def __unicode__(self):
        return self.CARDNUMBER
class Blabla(models.Model):
...   
    card = models.ForeignKey(Card)
    card_owner = models.CharField(max_length=150, null=True, blank=True, editable=False)
...  
    def save(self):
        if self.card_owner is None:
            self.card_owner = self.card.NAME
        super(Blabla, self).save()
class BlablaAdmin(admin.ModelAdmin):
...
    raw_id_fields = ('card', )
...

из вышеприведенного куска видно, что card_owner автоматом присваивается исходя из № карты и соответствующее поле (card_owner) в форме подачи заявки юзеру не показывается. хочу, чтобы при подаче заявки, при нажатии “лупы” и выборе там номера карты, автоматически заполнялось бы поле card_owner и юзер видел поле card_owner, но не мог редактировать(чтобы результат было видно еще до нажатия кнопки “сохранить”). такое можно реализовать?

Офлайн

#7 Окт. 17, 2013 15:36:25

andrey16
Зарегистрирован: 2013-09-26
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

django и несколько бд

andrey16
хочу, чтобы при подаче заявки, при нажатии “лупы” и выборе там номера карты, автоматически заполнялось бы поле card_owner и юзер видел поле card_owner, но не мог редактировать(чтобы результат было видно еще до нажатия кнопки “сохранить”)

сделал немного по-другому, но результат удовлетворяет.
воспользовался django-salmonella, расширяющей возможности raw_id_fields.
с помощью кастомного шаблона вывожу помимо карты через дефис и ее владельца

Отредактировано andrey16 (Окт. 17, 2013 15:37:25)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version