为什么可以';在Django模型中,外键值是否为字符串?

为什么可以';在Django模型中,外键值是否为字符串?,django,django-models,django-orm,Django,Django Models,Django Orm,在Django模型中,外键保存为整数,而不是字符串属性。为什么它们不是绳子 class CreateRoutine(models.Model): createRoutineID=models.AutoField(默认值=None,最大长度=20,主键=True,详细名称=createRoutineID') dpt\u code=models.ForeignKey('Department',默认值=None,on\u delete=models.CASCADE,verbose\u name='dp

在Django模型中,外键保存为整数,而不是字符串属性。为什么它们不是绳子

class CreateRoutine(models.Model):
createRoutineID=models.AutoField(默认值=None,最大长度=20,主键=True,详细名称=createRoutineID')
dpt\u code=models.ForeignKey('Department',默认值=None,on\u delete=models.CASCADE,verbose\u name='dpt\u code',
db_column=“dpt_代码”)
fac_shortName=models.ForeignKey('Faculty',默认值=None,on_delete=models.CASCADE,verbose_name='fac_shortName',
db_column=“fac_shortName”)
batch=models.ForeignKey('batch',默认值=None,on\u delete=models.CASCADE,verbose\u name='batch',db\u column=“batch”)
section=models.ForeignKey('Batch',默认值=None,on_delete=models.CASCADE,related_name='section',
详细的“\u name='section',db\u column=“section”)
roomCode=models.ForeignKey('Room',默认值=None,on_delete=models.CASCADE,verbose_name='roomCode',
db_column=“房间”)
crs\u title=models.ForeignKey('Course',default=None,on\u delete=models.CASCADE,verbose\u name='crs\u title',
db_column=“crs_title”)
courseCode=models.ForeignKey('Course',默认值=None,on_delete=models.CASCADE,related_name='Code',
详细的\u name='courseCode',db\u column=“courseCode”)
day=models.ForeignKey('TimeSlot',默认值=None,on\u delete=models.CASCADE,verbose\u name='day',db\u column=“day”)
duration=models.ForeignKey('TimeSlot',默认值=None,on_delete=models.CASCADE,related_name='duration',
详细的名称=“持续时间”,db\u column=“持续时间”)
类元:
db_table=''tbl_createRoutine''
verbose_name=“CreateRoutine”
详细名称复数=“CreateRoutine”

您实际上可以将任何字段指定为包含文本的
主键。您可能尚未为您的型号指定
主键
,因此Django会自动为您添加一个
整型字段
;这就是为什么您可以调用
instance.id
instance.pk
,即使您没有在模型中添加这些字段。将能够更详细地解释这一点

编辑/添加
进行了一些研究,显然您可以将引用模型的任何字段存储为外键,只要该字段是
unique=True

为此,请使用ForeignKey的
to_字段
属性

class MyModel(Model):
    related = ForeignKey(RelatedModel, to_field='related_model_unique_field`)

我希望这不会直接回答这个问题,但我相信您会满意它

Django model外键返回id,而不是unicode中指定的数据库中属性的字符串或字符值。如何在数据库中将外键保存为characterfield而不是integer?示例-如果fac_shortName是外键,则应将其保存为字符字段,而不是数据库中的整数。我建议您在某些数据库浏览器中打开数据库,并仔细查看其结构。Django-string方法中的返回外键字段。我如何在代码中做到这一点?我检查了数据库postgresql外键是否存储为整数而不是字符可变字段我是否应该使用属性或unicode来返回外键的字符串?编辑了我的答案,请检查它-它将允许您使用特殊字段作为外键值