@organica

ForeignKey к определенному полю модели, как?

Господа программисты, подскажите как мне сделать отношение oneToMany через ForeignKey, привязываясь не к конкретной модели, а к ее полю?
class TechType(models.Model):
    type_name = models.CharField(max_length=100, verbose_name='Вид техники', unique=True)

    def __str__(self):
        return self.type_name


class TechUnit(models.Model):
    inner_id = models.CharField(max_length=100, verbose_name='Внутренний номер', unique=True)
    tech_type = models.ForeignKey(TechType, on_delete=models.CASCADE, verbose_name='Вид техники')

    def __str__(self):
        return self.inner_id

Первым делом я создаю 4 экземпляра класса TechType.
Далее я создаю экземпляры класса TechUnit: ввожу его Inner_id и выбираю из выпадающего списка к какому типу техники он относится в TechType. Выбор происходит нормально, в выпадающем списке появляются ровно те категории техники, которые я завел на предыдущем шаге.
Однако далее я начал ловить ошибки, связанные с приведением текста к строке и долго не мог понять в чем причина, пока случайно не создал новый TechType под названием 4 и ошибка пропала. Мой шаблон загрузился и выдал мне нужную информацию. Залез в БД и нашел занятную вещь( см. скриншот). Мой TechUnit в БД привязан к id TechType, а не к полю TechType type_name. К примеру, TechUnit с inner_id 114 привязан к TechType Pallet_truck, а в БД он привязан к tech_type_id = 4. Как мне привязаться к полю type_name у класса TechType???
5dc705c73b3a7158919268.jpeg
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ответы на вопрос 2
@bacon
У вас проблемы с пониманием отношений, ForeignKey привязывается к id модели. Ваша хотелка не имеет смысла.
Ответ написан
cellmon
@cellmon
Botviber
Или если обьектов класса не много десяток - два! Вообще ликвидируйте модель TechType
а в модели TechUnit, поле tech_type заполняйте через choises

class TechUnit(models.Model):
type_name1 = 'номер1'
type_name2 = 'номер2'
type_name3 = 'номер3'
Category = [
( type_name1, 'номер1'),
( type_name2, 'номер2'),
( type_name3, 'номер3'),
]
inner_id = models.CharField(max_length=100, verbose_name='Внутренний номер', unique=True)
tech_type = models.CharField(max_length=100, verbose_name='Вид техники', choices=Category,
default=Main)
def __str__(self):
return self.inner_id
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
13 нояб. 2019, в 14:47
300 руб./в час
13 нояб. 2019, в 14:47
3000 руб./за проект
13 нояб. 2019, в 14:42
3000 руб./за проект