我正在使用inspectdb查看django生成的模型类。
我注意到,有时字符串和有时变量名是基于它们的";从上到下读取";文件中的外观。
此处和示例
class AuthGroup(models.Model):
name = models.CharField(unique=True, max_length=150)
class Meta:
managed = True
db_table = 'auth_group'
class AuthGroupPermissions(models.Model):
id = models.BigAutoField(primary_key=True)
group = models.ForeignKey(AuthGroup, models.DO_NOTHING)
permission = models.ForeignKey('AuthPermission', models.DO_NOTHING)
class Meta:
managed = True
db_table = 'auth_group_permissions'
unique_together = (('group', 'permission'),)
class AuthPermission(models.Model):
name = models.CharField(max_length=255)
content_type = models.ForeignKey('DjangoContentType', models.DO_NOTHING)
codename = models.CharField(max_length=100)
class Meta:
managed = True
db_table = 'auth_permission'
unique_together = (('content_type', 'codename'),)
在我的案例中使用遗留数据库(mysql(。
问题是:我可以不总是使用表的字符串名称插入有时字符串有时变量吗?对我来说那会更安全这两种说法不会起到同样的作用吗?
group = models.ForeignKey('AuthGroup', models.DO_NOTHING)
permission = models.ForeignKey('AuthPermission', models.DO_NOTHING)
问题是:我可以不总是使用有时字符串有时变量的表insead的字符串名称吗?
是:使用ForeignKey(Foo, …)
可以替换为ForeignKey('Foo', …)
。字符串文字通常用于引用将在文件中进一步定义的模型,因为如果尚未定义Foo
类,则不能使用Foo
。
但是,如果您愿意,您可以为所有ForeignKey
s使用字符串文字。您可以用'app_name.ModelName'
或简单地用'ModelName'
引用模型,如果该模型是为与您定义的模型相同的应用程序名称定义的。