我正在查看使用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)。
问题是:我不能总是使用有时字符串有时变量的insead表的字符串名称吗?这在我的情况下会更安全,难道这两项声明不会做同样的事情吗?
group = models.ForeignKey('AuthGroup', models.DO_NOTHING)
permission = models.ForeignKey('AuthPermission', models.DO_NOTHING)发布于 2022-02-09 11:28:27
队列是:我不能总是使用有时字符串有时变量的insead表的字符串名称吗?
是:使用ForeignKey(Foo, …)可以用ForeignKey('Foo', …)代替。字符串文字通常用于引用将在文件中进一步定义的模型,因为如果尚未定义Foo类,则不能使用Foo。
但是如果您愿意,您可以对所有的'app_name.ModelName'使用字符串字面值。如果模型是为与您定义的模型相同的应用程序名定义的,则可以使用'ModelName'引用模型。
https://stackoverflow.com/questions/71047518
复制相似问题