Найти - Пользователи
Полная версия: ForeignKey связи между таблицами не по id (primary_key), to_field?
Начало » Django » ForeignKey связи между таблицами не по id (primary_key), to_field?
1
quadright
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 проиндексирован.
ilnur
точно не знаю. Но возможно связь проходит по primary_key, и если chanel_id будет primary_key для таблицы. Может связь и будет по нему
quadright
Ситуация что на таблицу “test_category” из нескольких мест ссылки идут и в каждом случае по разным ячейкам связывать надо.
Всеравно благодарю за ответ, может еще предположения? второй день такую мелочь в ORM сделать пытаюсь.
ilnur
а зачем?
quadright
Зачем? А действительно зачем? И надоли оно мне?…
Уговорил, изменил структуру БД. Всеравно интересно было бы знать как не по primary_key цеплять таблицы? Как я понял по документации прописываешь to_field другое, но не получается. Может в синтаксисе ошибка?
quadright
Да, решение как и подозревал весьма банальное:

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, изначально непривычно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB