Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » ForeignKey связи между таблицами не по id (primary_key), to_field? [RSS Feed]

#1 Авг. 23, 2013 04:50:23

quadright
Зарегистрирован: 2013-07-26
Сообщения: 75
Репутация: +  1  -
Профиль   Отправить e-mail  

ForeignKey связи между таблицами не по id (primary_key), to_field?

class test_category(models.Model):
    id = models.IntegerField(max_length=11)
    channel_id = models.IntegerField(max_length=11)
    category = models.CharField(max_length=100)
class test_01(models.Model):
    id = models.IntegerField(max_length=11)
    channel = models.ForeignKey(test_category, to_field='channel_id')
    program_id = models.IntegerField(max_length=11)
    title = models.CharField(max_length=100)

Происходит связь по полю test_category.id, а как сделать по test_category.channel_id? В БД test_category.channel_id проиндексирован.

Отредактировано quadright (Авг. 23, 2013 04:52:10)

Офлайн

#2 Авг. 23, 2013 06:46:17

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

ForeignKey связи между таблицами не по id (primary_key), to_field?

точно не знаю. Но возможно связь проходит по primary_key, и если chanel_id будет primary_key для таблицы. Может связь и будет по нему

Офлайн

#3 Авг. 23, 2013 07:17:38

quadright
Зарегистрирован: 2013-07-26
Сообщения: 75
Репутация: +  1  -
Профиль   Отправить e-mail  

ForeignKey связи между таблицами не по id (primary_key), to_field?

Ситуация что на таблицу “test_category” из нескольких мест ссылки идут и в каждом случае по разным ячейкам связывать надо.
Всеравно благодарю за ответ, может еще предположения? второй день такую мелочь в ORM сделать пытаюсь.

Офлайн

#4 Авг. 23, 2013 07:42:38

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

ForeignKey связи между таблицами не по id (primary_key), to_field?

а зачем?

Офлайн

#5 Авг. 23, 2013 08:22:54

quadright
Зарегистрирован: 2013-07-26
Сообщения: 75
Репутация: +  1  -
Профиль   Отправить e-mail  

ForeignKey связи между таблицами не по id (primary_key), to_field?

Зачем? А действительно зачем? И надоли оно мне?…
Уговорил, изменил структуру БД. Всеравно интересно было бы знать как не по primary_key цеплять таблицы? Как я понял по документации прописываешь to_field другое, но не получается. Может в синтаксисе ошибка?

Отредактировано quadright (Авг. 23, 2013 08:23:31)

Офлайн

#6 Авг. 23, 2013 09:46:37

quadright
Зарегистрирован: 2013-07-26
Сообщения: 75
Репутация: +  1  -
Профиль   Отправить e-mail  

ForeignKey связи между таблицами не по id (primary_key), to_field?

Да, решение как и подозревал весьма банальное:

class test_category(models.Model):
    id = models.IntegerField(max_length=11, primary_key=True)
    channel_id = models.IntegerField(max_length=11, primary_key=True)
    category = models.CharField(max_length=100)
class test_01(models.Model):
    id = models.IntegerField(max_length=11)
    channel = models.ForeignKey(test_category, to_field='channel_id')
    program_id = models.IntegerField(max_length=11)
    title = models.CharField(max_length=100)

Сейчас по полю ‘channel_id’, если надо сделать привязку по ‘id’, то прописываем вместо to_field='channel_id' -> to_field='id'.
Замечательно всё работает своя логика у ORM, изначально непривычно.

Офлайн

  • Начало
  • » Django
  • » ForeignKey связи между таблицами не по id (primary_key), to_field?[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version