Python 外键数据类型

Python 外键数据类型,python,django,foreign-keys,primary-key,rdms,Python,Django,Foreign Keys,Primary Key,Rdms,在DJango项目中,我在models.py中有两个类 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, o

在DJango项目中,我在models.py中有两个类

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?(或)它将继承主键的数据类型?

作为person表的主键,orders表中的field22将包含整数。 该点大于,因为它是外键,所以不能作为标准整数执行操作

例如: 在table person中,您有两行:

现场/人员

1/MrX

2/MrY

按餐桌顺序

主键(自动)/字段22/其他字段

1/2/text2.1

2/1/text1.1

3/1/text1.2

如果您想在表orders中查找MrX,则必须在orders表中获得MrX的实例和搜索结果:

#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']
例如,如果您尝试按field22的值进行搜索:

search=orders.objects.filter(field22=1).values_list('otherfield' )
您将引发一个异常,该异常将解释您比预期的实例和收到的实例多1。
希望它能回答你的问题

外键必须具有相同的数据类型。