Тип данных внешнего ключа - PullRequest
0 голосов
/ 26 января 2020

У меня есть два класса в models.py в моем DJango проекте.

class person(models.Model):-
    field1 = models.AutoField(primary_key=True)
    person_name = models.CharField(max_length=100, null=True, blank=True)

class orders(models.Model):-
    field22 = models.ForeignKey(person, on_delete=models.CASCADE, null=True)

Как отмечалось в приведенных выше двух моделях, field22 является внешний ключ, который сопоставлен первичному ключу таблицы person .

Теперь, что будет тип данных для field22, int (или) str? (или) он унаследует тип данных первичного ключа?

1 Ответ

1 голос
/ 26 января 2020

В качестве первичных ключей таблицы person поле22 в таблице заказов будет содержать целые числа. Дело в том, что, поскольку это внешний ключ, вы не можете выполнять операции как стандартное целое число.

Например: в таблице person у вас есть две строки:

field / person

1 / MrX

2 / MrY

В таблицах заказов

pk (automati c) / field22 / otherfield

1/2 / text2 .1

2/1 / text1.1

3/1 / text1.2

Если вы хотите просмотреть таблицы заказов для MrX, вам нужно будет получить Экземпляр таблицы MrX in person и результат поиска в таблицах заказов:

#get instance
instancePerson=person.objects.get(person="MrX")
#and then look in orders
search=orders.objects.filter(field22=instancePerson).values_list('otherfield' )
print(search) 

#output:
['text1.1','text1.2']

Если в качестве примера вы попытаетесь выполнить поиск по значению поля 22:

search=orders.objects.filter(field22=1).values_list('otherfield' )

Вы выдадите исключение, которое объяснит вам, чем ожидался и был получен экземпляр 1. Надеюсь, что он ответил на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...